DRF: Djoser переопределяет настраиваемый пользовательский сериализатор

Раньше я работал с серверной частью, но после нескольких месяцев отсутствия кодирования я теперь не совсем уверен в коде, который у меня есть сейчас. Итак, я использую Djoser, и у меня это есть в моем файле проекта settings.py

  ...
    'SERIALIZERS': {
            'user_create': 'backend.accounts.serializers.UserCreateSerializer',
            'user': 'backend.accounts.serializers.UserCreateSerializer',
            'user_delete': 'djoser.serializers.UserDeleteSerializer',
    }
  ...

Это должно переопределить сериализатор Djoser по умолчанию, но, как я вижу, он ничего не делает.

/ auth / users / me / - возвращает это

{
    "email": "[email protected]",
    "id": 1,
    "username": "test"
}

но у меня это как сериализатор внутри backend / accounts / serializers

class UserCreateSerializer(UserCreateSerializer):
    delete_request = DeleteUserSerializer(read_only=True)

    class Meta(UserCreateSerializer.Meta):
        model = User
        fields = (
            'id',
            'email',
            'username',
            'password',
            'delete_request',
        )

Почему не отменяет?


person Dziugito Bizox    schedule 29.04.2021    source источник


Ответы (1)


Конечная точка /users/me/ обрабатывается current_user ключом в dict сериализаторов djoser, поэтому вы должны добавить ее:

'SERIALIZERS': {
    # [...]
    'current_user': 'backend.accounts.serializers.UserSerializer',
    # [...]
}

Дополнительную информацию о сериализаторах djoser можно найти в документации.

Они говорят:

Ключ user используется для обычных пользователей, тогда как current_user позволяет вам установить сериализатор для специальной конечной точки / users / me. Однако они оба по умолчанию используют один и тот же сериализатор.

И, кстати, я думаю, вам следует создать сериализатор, наследующий от djoser.serializers.UserSerializer, а не от djoser.serializers.UserCreateSerializer для ключей user и cuttent_user.

person Roman Mkrtchian    schedule 29.04.2021