我正在使用这样的视图集:
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 /api/user/
的所有用户时,它将返回以下json_data:
[
{
"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_framework视图。我想要一个视图集和序列化器来实现这一点。有什么办法可以实现呢?
我在前端使用React,并且希望避免获取不必要的数据。
答案 0 :(得分:1)
我知道的唯一方法是覆盖get_serializer_class
-Method并根据当前请求返回一个不同的Serializer
。
class UserViewSet(viewsets.ModelViewSet):
....
def get_serializer_class(self, request):
if self.action == 'retrieve':
return UserDetailSerializerClass
return UserListSerializerClass
还有一个pypi package
积分:https://stackoverflow.com/a/22755648/7774036和https://stackoverflow.com/a/30670569/7774036