DRF:Djoser 覆盖自定义用户序列化程序

DRF: Djoser override custom user serializer

以前我一直在后端工作,但几个月没有编码后,我现在对我现在的代码不太满意。所以我使用 Djoser,我的项目中有这个 settings.py 文件

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

这应该会覆盖默认的 Djoser 序列化程序,但正如我所见,它什么也没做。

/auth/users/me/ - Returns 这个

{
    "email": "test@gmail.com",
    "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',
        )

为什么不覆盖?

/users/me/ 端点由 djoser serializers dict 中的 current_user 键处理,因此您应该添加它:

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

您可以获得有关 djoser serializers on the documentation 的更多信息。

他们说:

Key 'user' is used for general users whereas 'current_user' lets you set serializer for special /users/me endpoint. They both default to the same serializer though.

顺便说一下,我认为您应该为 usercuttent_user 键创建一个从 djoser.serializers.UserSerializer 而不是 djoser.serializers.UserCreateSerializer 继承的序列化程序。