2

以前我一直在使用后端,但是在几个月没有编码之后,我现在对现在的代码不太满意。所以我使用 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": "test@gmail.com",
    "id": 1,
    "username": "test"
}

但我有这个作为我在后端/帐户/序列化程序中的序列化程序

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

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

为什么它不覆盖?

4

1 回答 1

3

/users/me/端点由current_userdjoser 序列化程序 dict 中的键处理,因此您应该添加它:

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

您可以在文档中获得有关djoser 序列化程序的更多信息。

他们说:

密钥“user”用于一般用户,而“current_user”允许您为特殊的 /users/me 端点设置序列化程序。不过,它们都默认使用相同的序列化程序。

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

于 2021-04-29T12:26:19.707 回答