Настройка сериализатора Djoser

Я создал два настраиваемых сериализатора для конечных точек user_create и current_user в Djoser. Я также хотел иметь поле re_password в регистре пользователя. Но когда я добавляю "USER_CREATE_PASSWORD_RETYPE": True в настройки Djoser, мой сериализатор для создания пользователя не работает. Не могли бы вы подсказать мне, в чем проблема?

вот мой сериализатор:

from djoser.serializers import UserSerializer as BaseUserSerializer, UserCreateSerializer as BaseUserCreateSerializer

class UserCreateSerializer(BaseUserCreateSerializer):    
    class Meta(BaseUserCreateSerializer.Meta):
        fields = ['id', 'username', 'password', 'email', 'first_name', 'last_name']


class UserSerializer(BaseUserSerializer):
    class Meta(BaseUserSerializer.Meta):
        fields = ['id', 'username', 'email', 'first_name', 'last_name', 'password']

а вот параметры Джосера:

DJOSER = {
    "USER_CREATE_PASSWORD_RETYPE": True,
    "SERIALIZERS": {
        'user_create': 'core.serializers.UserCreateSerializer',
        'current_user': 'core.serializers.UserSerializer',
    }
}

В итоге я унаследовал от UserCreatePasswordRetypeSerializer вместо UserCreateSerializer, чтобы иметь и поле re_password и мой настроенный сериализатор. А также я удалил "USER_CREATE_PASSWORD_RETYPE": True из настроек и все работает правильно.

Не нужно удалять "USER_CREATE_PASSWORD_RETYPE": True из settings.py. Вам просто нужно определить новый сериализатор

from djoser.serializers import UserCreatePasswordRetypeSerializer

class CustomUserCreatePasswordRetypeSerializer(UserCreatePasswordRetypeSerializer):    
    class Meta(UserCreatePasswordRetypeSerializer.Meta):
        fields = ['id', 'username', 'password', 'email', 'first_name', 'last_name']

и в settings.py

DJOSER = {
    "SERIALIZERS": {
        'user_create_password_retype': 'core.serializers.CustomUserCreatePasswordRetypeSerializer',
    }
}

так как он использует сериализатор user_create_password_retype, когда "USER_CREATE_PASSWORD_RETYPE" установлен на True.

Вернуться на верх