我正在使用Django REST framework和djangorestframework-csv,并使用默认分页设置,但当请求的格式为“CSV”时,则不需要分页。可以使用以下命令禁用分页:
第一个月
是否可以动态地更改它?
class ObjectViewSet(BaseViewSet, viewsets.ModelViewSet):
queryset = Object.objects.none()
serializer_class = ObjectSerializer
pagination_class = None # if format is "CSV"
# pagination_class = None # if fromat isn't "CSV"
字符串
谢谢.
8条答案
按热度按时间4szc88ey1#
一个选项是通过设置
no_page
查询参数来动态禁用视图上的分页:字符串
dfty9e192#
这个方案对我很有效
DRF版本:3.11.0
Django版本:2.2.7
默认情况下,分页是工作的,但当我将通过查询参数'no_page',然后分页将被禁用:像:http://localhost:8000/api/city/?no_page
字符串
0ve6wy6x3#
如果您只想按客户端动态打开或关闭分页,则可以将Pagination类自定义为:
字符串
使用这个类作为你的pagination_class,你可以通过请求URL“http://www.example.com/some_object/?page_size=0“关闭分页,?page_size=0将禁用分页。如果你只是想在请求格式为CVS时禁用分页,你可以试试danilke说的。
bksxznpy4#
简单地说,你可以在你的类中使用
pagination_class = None
:字符串
qncylg1j5#
它不再起作用了(至少在最新版本中不起作用),你应该这样做
字符串
并在列表方法中使用
self.paginate_queryset(queryset, request)
调用函数fzsnzjdm6#
解决方案是:
字符串
然后:
型
并从设置中删除:
型
ncecgwcz7#
也许有一种更适合未来的方法-打开
my_venv/lib/python3.8/site-packages/rest_framework/generics.py
-替换my_venv
和你的Python版本,滚动到第165行并复制paginate_queryset
的方法签名。还要检查它返回什么if self.paginator is None
-如果你想禁用分页,那就是返回什么。在DRF 3.11中,父方法签名是
paginate_queryset(self, queryset)
,而if self.paginator is None
返回None
,所以我使用:字符串
我还没有测试过它,但我猜OP问题的答案是(假设一个相当默认的DRF配置):
型
hmmo2u0o8#
我的解决方案:
page_size
page
参数时应用分页字符串
使用方法:
型
测试并使用Django 4.2和DRF 3.14。