关闭 Django Rest Framework ModelViewSet 的自动分页
Posted
技术标签:
【中文标题】关闭 Django Rest Framework ModelViewSet 的自动分页【英文标题】:Turn off automatic pagination of 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 设置为一个较大的数字,以便返回更多结果。 【参考方案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
【讨论】:
以上是关于关闭 Django Rest Framework ModelViewSet 的自动分页的主要内容,如果未能解决你的问题,请参考以下文章
django rest-framework-2没有名为apps的模块[关闭]
关闭 Django Rest Framework ModelViewSet 的自动分页
Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证