从Django库中,我们可以仅覆盖视图集的一部分,而不是完全重写视图集吗?

问题描述

我正在使用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)

但是我不知道这是否可行,因为没有提到retrieveget_instance。 有更短的正确方法吗?

解决方法

如果您要为GET /users/me返回不同的响应,则只需更改序列化器即可。

您甚至无需继承UserViewSet就可以做到这一点。在UserViewSet.get_serializer_class中有

      elif self.action == "me":
            return settings.SERIALIZERS.current_user

因此请在djoser设置中分配其他序列化器。

请参见docs

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...