Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DRF在'上显示不同的字段;列表';和';获取对象';_Python_Django_Python 3.x_Django Rest Framework - Fatal编程技术网

Python DRF在'上显示不同的字段;列表';和';获取对象';

Python DRF在'上显示不同的字段;列表';和';获取对象';,python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我使用的视图集如下所示: class UserViewSet(viewsets.ModelViewSet): """Viewset for model User.""" queryset = User.objects.all() serializer_class = UserSerializer 我的序列化程序具有以下字段: fields = ('id', 'url', 'username', 'first_name', 'middle_name', 'last_na

我使用的视图集如下所示:

class UserViewSet(viewsets.ModelViewSet):
    """Viewset for model User."""

    queryset = User.objects.all()
    serializer_class = UserSerializer
我的序列化程序具有以下字段:

fields = ('id', 'url', 'username', 'first_name', 'middle_name', 'last_name', 'role',
          'get_role_display', 'is_authenticated', 'is_staff', 'is_superuser', )
当我访问api以列出具有此url的所有用户时,它将返回以下json_数据:

[
{
    "id": 1,
    "url": "http://127.0.0.1:8000/api/user/1/",
    "username": "admin",
    "first_name": "",
    "middle_name": null,
    "last_name": "",
    "role": "A",
    "get_role_display": "Admin",
    "is_authenticated": true,
    "is_staff": true,
    "is_superuser": true
},
{
    "id": 2,
    "url": "http://127.0.0.1:8000/api/user/2/",
    "username": "7004104463",
    "first_name": "Vaibhav",
    "middle_name": "Bold",
    "last_name": "Vishal",
    "role": "S",
    "get_role_display": "Student",
    "is_authenticated": true,
    "is_staff": false,
    "is_superuser": false
}
]
但我要做的是只返回列表中的几个字段,比如只返回
'id',username',url',
,但在请求单个对象时,像这样
/api/user/1/
我想返回所有字段。我希望避免使用两种不同的rest_框架视图。我想要一个视图集和序列化程序来实现这一点。有什么办法可以实现吗?

我正在使用React on frontend,希望避免获取不必要的数据。

我知道的唯一方法是覆盖,并根据当前请求返回不同的
序列化程序

class UserViewSet(viewsets.ModelViewSet):
    ....
    def get_serializer_class(self, request):
        if self.action == 'retrieve':
            return UserDetailSerializerClass
        return UserListSerializerClass
还有一个


信用证:&

据我所知,唯一的方法是覆盖并根据当前请求返回不同的
序列化程序

class UserViewSet(viewsets.ModelViewSet):
    ....
    def get_serializer_class(self, request):
        if self.action == 'retrieve':
            return UserDetailSerializerClass
        return UserListSerializerClass
还有一个


信用证:&

谢谢,我明天将使用try this,同时我也将尝试找到一些方法,使它只使用一个serializer就可以工作。序列化程序不是按您想要的方式设计的,但我相信有一种方法可以破解它。它的代码总是有的,但我不推荐它。了解如何使用>1,也许可以使用pypi包使其更简单(我编写了自己的版本)。我根据视图的操作找到了一些不同的解决方案,例如在序列化程序的init中弹出字段。这些使代码变得更短,但更复杂。因此,我认为按照您的建议,使用不同的序列化程序类是最好的选择。谢谢,我明天将使用try this,同时我也将尝试找到一些方法,使它只使用一个serializer就可以工作。序列化程序不是按您希望的方式设计的,但我确信有一种方法可以破解它。它的代码总是有的,但我不推荐它。了解如何使用>1,也许可以使用pypi包使其更简单(我编写了自己的版本)。我根据视图的操作找到了一些不同的解决方案,例如在序列化程序的init中弹出字段。这些使代码变得更短,但更复杂。因此,我认为使用不同的序列化程序类是您建议的最佳选择。