【问题标题】:DRF: Djoser override custom user serializerDRF:Djoser 覆盖自定义用户序列化程序
【发布时间】:2021-07-22 18:30:39
【问题描述】:

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

但我在 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',
        )

为什么不覆盖?

【问题讨论】:

    标签: python django-rest-framework djoser


    【解决方案1】:

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

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

    您可以了解更多关于djoser serializers on the documentation的信息。

    他们说:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2010-11-01
      相关资源
      最近更新 更多