Django rest framework: how to turn off/on pagination in ModelViewSet
This solution is working for me
DRF Version: 3.11.0
Django Version: 2.2.7
By default pagination is working but when I will pass the query param 'no_page' then pagination will be disabled: like: http://localhost:8000/api/city/?no_page
class CityListView(generics.ListCreateAPIView):
serializer_class = serializers.CitySerializer
def paginate_queryset(self, queryset, view=None):
if 'no_page' in self.request.query_params:
return None
else:
return self.paginator.paginate_queryset(queryset, self.request, view=self)
simply you can use pagination_class = None
inside your class:
class MyClassBasedView(ModelViewSet):
pagination_class = None
One option would be to dynamically disable pagination on the view by setting a no_page
query parameter:
def paginate_queryset(self, queryset, request, view=None):
if 'no_page' in request.query_params:
return None
return super().paginate_queryset(queryset, request, view)
if you just want to turn on or off pagination by client dynamically,you can custom Pagination class as:
class Pagination(PageNumberPagination):
page_size_query_param = 'page_size'
max_page_size = 100
def get_page_size(self, request):
if self.page_size_query_param:
page_size = min(int(request.query_params.get(self.page_size_query_param, self.page_size)),
self.max_page_size)
if page_size > 0:
return page_size
elif page_size == 0:
return None
else:
pass
return self.page_size
use this class as your pagination_class and you can turn off pagination by request url "http://www.example.com/some_object/?page_size=0", ?page_size=0 will disable pagination. if you just want disable pagination when request format is CVS,you can try what danilke said.