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中弹出字段。这些使代码变得更短,但更复杂。因此,我认为使用不同的序列化程序类是您建议的最佳选择。