Django rest framework: how to turn off/on pagination in ModelViewSet

前端 未结 2 725
心在旅途
心在旅途 2021-02-15 07:22

I\'m using Django REST framework with djangorestframework-csv with default pagination settings, but when request is with format \"CSV\", there is no need in paginaion. Is possib

相关标签:
2条回答
  • 2021-02-15 08:00

    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.

    0 讨论(0)
  • 2021-02-15 08:01

    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)
    
    0 讨论(0)
提交回复
热议问题