【问题标题】:Turn off automatic pagination of Django Rest Framework ModelViewSet关闭 Django Rest Framework ModelViewSet 的自动分页
【发布时间】:2016-08-01 21:09:49
【问题描述】:

我正在使用 Django Rest Framework 的 ModelViewSet 来表达我的观点之一。 ModelViewSet 使用 ListModelMixin 自动对结果进行分页,但我不希望对结果进行分页。在我的 API 调用中,我说我想要返回多少个结果,但目前我无法在一次调用中返回超过 10 个结果。

有没有办法关闭自动分页,这样我就可以返回任意多的结果?

【问题讨论】:

  • ListModelMixing 非常简单,(github.com/tomchristie/django-rest-framework/blob/…) 看起来你可以编写自己的 mixin 并省略执行分页的行。
  • 我还没有找到一种简单的方法来完全关闭分页,但我能够将 REST_FRAMEWORK 设置中的 PAGE_SIZE 设置为一个较大的数字,以便返回更多结果。

标签: django pagination django-rest-framework


【解决方案1】:

如果您使用的是最新版本的 DRF,您只需将 pagination_class = None 添加到您的 ModelViewSet 定义中。

class MyClassBasedView(ModelViewSet):
    pagination_class = None
    ...

你也可以在这里看到一些提示https://github.com/tomchristie/django-rest-framework/issues/1390

【讨论】:

  • 但这会删除 results 属性
  • @ospider 为什么需要他?
  • 有时您希望对两个选项使用相同的视图集。在这些情况下覆盖 paginate_queryset 方法。
【解决方案2】:

ModelViewSet 或 mixins.ListModelMixin 自动为我们创建分页。你可以通过 分页器 = 无

class NotesViewSet(viewsets.ModelViewSet):    
     queryset = Notes.objects.all()
     serializer_class = NotesWriteSerializer
     paginator = None

【讨论】:

    【解决方案3】:

    如果您希望仅针对一项操作禁用分页器:

    @property
    def paginator(self):
        self._paginator = super(NotesViewSet, self).paginator
        if self.action == 'the_action_you_want_pagination_disabled':
            self._paginator = None
        return self._paginator
    

    在您的ModelViewSet 中使用它。

    【讨论】:

      【解决方案4】:

      在 settings.py 中用于全局

      REST_FRAMEWORK = {
          'DEFAULT_PAGINATION_CLASS': None,
          'PAGE_SIZE': 99999999, # a very large number
      }
      

      【讨论】:

        猜你喜欢
        • 2015-10-25
        • 2017-11-06
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 2021-08-10
        • 2019-04-26
        • 1970-01-01
        相关资源
        最近更新 更多