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.