DRF:Djoser 覆盖自定义用户序列化程序
Posted
技术标签:
【中文标题】DRF:Djoser 覆盖自定义用户序列化程序【英文标题】:DRF: Djoser override custom user serializer 【发布时间】: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',
)
为什么不覆盖?
【问题讨论】:
【参考方案1】:/users/me/
端点由 djoser 序列化程序字典中的 current_user
键处理,因此您应该添加它:
'SERIALIZERS':
# [...]
'current_user': 'backend.accounts.serializers.UserSerializer',
# [...]
您可以了解更多关于djoser serializers on the documentation的信息。
他们说:
键 'user' 用于一般用户,而 'current_user' 允许您为特殊的 /users/me 端点设置序列化程序。不过,它们都默认使用相同的序列化程序。
顺便说一句,我认为您应该为user
和cuttent_user
键创建一个继承自djoser.serializers.UserSerializer
而不是djoser.serializers.UserCreateSerializer
的序列化程序。
【讨论】:
以上是关于DRF:Djoser 覆盖自定义用户序列化程序的主要内容,如果未能解决你的问题,请参考以下文章
CSIC_716_20200221drf--自定义外键字段十大接口