aro*_*ooo 1 python django django-rest-framework
我一直在关注 django-rest-framework 文档示例,但是在使用 ListModelMixin 和 viewsets.GenericViewset 时无法使分页工作
这不分页:
class InvitesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
permission_classes = [IsAuthenticated]
queryset = User.objects.all()
serializer_class = UserSerializer
def list(self, request):
invited_users = self.get_queryset() # just did this as a test
serializer = UserSerializer(invited_users, many=True)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
虽然这样做:
class InvitesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
permission_classes = [IsAuthenticated]
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
如何在使用 ListModelMixin 时使用分页返回自定义列表响应(因为我需要过滤 request.user)?
小智 5
在您看来,您刚刚覆盖了默认list()功能,这样您就可以删除分页部分。
看代码 ListModelMixin
class ListModelMixin:
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
如果您需要使用过滤结果,则使用def get_queryset()函数
def get_queryset(self):
queryset = super(FooView, self).get_queryset()
queryset = queryset.filter(foo=bar)
return queryset
Run Code Online (Sandbox Code Playgroud)