问题描述
我正在使用djoser,阅读文档后,我想更改Userviewset中的部分代码。
我想覆盖def me(self,request,*args,**kwargs)
并对其进行自定义。对于get请求,我只想返回用户名和个人资料图片,而不是返回模型的所有字段。
我尝试做from djoser.views import UserViewSet
。然后,
class UserViewSet(viewsets.ModelViewSet):
# from djoser docs which I want to update
@action(["get","put","patch","delete"],detail=False)
def me(self,**kwargs):
self.get_object = self.get_instance
if request.method == "GET":
return self.retrieve(request,**kwargs)
elif request.method == "PUT":
return self.update(request,**kwargs)
elif request.method == "PATCH":
return self.partial_update(request,**kwargs)
elif request.method == "DELETE":
return self.destroy(request,**kwargs)
但是我不知道这是否可行,因为没有提到retrieve
和get_instance
。
有更短的正确方法吗?
解决方法
如果您要为GET /users/me
返回不同的响应,则只需更改序列化器即可。
您甚至无需继承UserViewSet
就可以做到这一点。在UserViewSet.get_serializer_class
中有
elif self.action == "me":
return settings.SERIALIZERS.current_user
因此请在djoser设置中分配其他序列化器。
请参见docs