Django Rest Framework - Невозможно создать учетную запись с Djoser

У меня проблема с регистрацией пользователя.

Я использую библиотеку Djoser от Sunscrapers.

При создании нового пользователя от почтальона я получаю ответ «Невозможно создать учетную запись».

введите описание изображения здесь

В моем терминале (докере) я получаю следующую информацию:

ERROR: null value in column "country_id" violates not-null constraint

DETAIL: Failing row contains (53, null, , t, [email protected], pbkdf2_sha256$180000$p2Q8c4Du3uLF$o56YHGCS0ZutasVhevPXl8rrMG/VYL..., , null, , , , 2020-03-10 10:06:48.053201+00, null, f).

STATEMENT: INSERT INTO "accounts_user" ("last_login", "email", "is_superuser", "is_active", "password", "first_name", "last_name", "date_of_birth", "description", "address", "phone", "created_at", "country_id") VALUES (NULL, '[email protected]', false, true, 'pbkdf2_sha256$180000$p2Q8c4Du3uLF$o56YHGCS0ZutasVhevPXl8rrMG/VYLiyzTB6LrSY4ws=', '', '', NULL, '', '', '', '2020-03-10T10:06:48.053201+00:00'::timestamptz, NULL) RETURNING "accounts_user"."id"

Похоже, что Djoser не видит тело моего запроса и пытается поместить в базу данных пустые или нулевые значения. До сих пор я пробовал следующее решение: Настроить конечную точку создания пользователя djoser .. .но это не сработало.

код:

serializers.py

class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = ['id', 'email', 'password', 'first_name', 'last_name', 'date_of_birth', 'description', 'address', 'phone', 'created_at', 'last_login', 'country']

    def create(self, validated_data):
        password = validated_data.pop('password')
        user = User(**validated_data)
        user.set_password(password)
        user.save()
        return user

views.py

class UserViewSet(ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
    permission_classes = []

У вас есть идеи, как это решить? Может я что то забыл? Спасибо за помощь :) С уважением,


person Przemek Baj    schedule 10.03.2020    source источник
comment
Вы переходите country вместо country_id?   -  person Craicerjack    schedule 10.03.2020
comment
разместите здесь код передней и задней части   -  person Dmitry Yudin    schedule 10.03.2020
comment
Да, именно так работает сериализатор DRF. Когда я создавал нового пользователя без Djoser, он работал. Это не проблема, потому что, как видите, остальные данные тела также пусты.   -  person Przemek Baj    schedule 10.03.2020
comment
это слишком долго, поэтому я отвечу на этот вопрос :)   -  person Przemek Baj    schedule 10.03.2020
comment
Однако остальные данные тела не являются нулевыми. вы можете видеть из STATEMENT в вашей трассировке, что некоторые значения передаются. STATEMENT: INSERT INTO "accounts_user" (...) VALUES (NULL, '[email protected]', false, true, 'pbkdf2_sha256$180000$p2Q8c4Du3uLF$o56YHGCS0ZutasVhevPXl8rrMG/VYLiyzTB6LrSY4ws=', '', '', NULL, '', '', '', '2020-03-10T10:06:48.053201+00:00'::timestamptz, NULL) RETURNING "accounts_user"."id"   -  person Craicerjack    schedule 10.03.2020


Ответы (1)


Решено: мне нужно было переопределить User REQUIRED_FIELDS в модели, чтобы Djoser использовал его в сериализаторе.

class User(AbstractUser):
    username_validator = None
    username = None
    ...

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name', 'date_of_birth', 'address', 'phone', 'country']
person Przemek Baj    schedule 11.03.2020
comment
Я поменял nulled по умолчанию в одном поле с REQUIRED_FIELDS на null = True, сделал миграции и работает - person Hvitis; 12.12.2020