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.
顺便说一下,我认为您应该为 user
和 cuttent_user
键创建一个从 djoser.serializers.UserSerializer
而不是 djoser.serializers.UserCreateSerializer
继承的序列化程序。
以前我一直在后端工作,但几个月没有编码后,我现在对我现在的代码不太满意。所以我使用 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.
顺便说一下,我认为您应该为 user
和 cuttent_user
键创建一个从 djoser.serializers.UserSerializer
而不是 djoser.serializers.UserCreateSerializer
继承的序列化程序。