Reputation: 7400
I have a Viewset which has the following list method:
class PolicyViewSet(viewsets.ViewSet):
def list(self, request):
queryset = Policy.objects.all()
serializer = PolicySerializer(queryset, many=True)
return Response(serializer.data)
This works as intended and I get my desired Response.However, now I am trying to limit the objects returned per GET request and for that I am using pagination.I have defined the following in the settings.py:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20
}
The docs say:
Pagination is only performed automatically if you're using the generic views or viewsets.
However, my result is still not paginated.What else do I need to do to enable pagination ?
Upvotes: 7
Views: 5473
Reputation: 4034
You can use either GenericViewSet
or ModelViewSet
(as its also inherited from GenericViewSet
).
Using
GenericViewSet
orModelViewSet
# or class PolicyViewSet(viewsets.GenericViewSet):
class PolicyViewSet(viewsets.ModelViewSet):
def list(self, request):
queryset = Policy.objects.all()
page = self.paginate_queryset(queryset)
if page is not None:
serializer = PolicySerializer(page, many=True)
return self.get_paginated_response(serializer.data)
else:
serializer = PolicySerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Using
ViewSet
class PolicyViewSet(viewsets.ViewSet):
def list(self, request):
from rest_framework.pagination import PageNumberPagination
queryset = Policy.objects.all()
paginator = PageNumberPagination()
page = paginator.paginate_queryset(queryset, request)
if page is not None:
serializer = PolicySerializer(page, many=True)
return paginator.get_paginated_response(serializer.data)
else:
serializer = PolicySerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Upvotes: 0
Reputation: 4630
If you overwrite your list or any main method you need to explicitly called for that.
class PolicyViewSet( viewsets.GenericViewset):
def list(self, request):
queryset = Policy.objects.all()
page = self.paginate_queryset(queryset)
serializer = PolicySerializer(page, many=True)
return self.get_paginated_response(serializer.data)
Upvotes: 18