gpt4 book ai didi

python - Django 休息框架 : turn on pagination on a ViewSet (like ModelViewSet pagination)

转载 作者:IT老高 更新时间:2023-10-28 22:02:11 27 4
gpt4 key购买 nike

我有一个这样的 ViewSet 来列出用户的数据:

class Foo(viewsets.ViewSet):

def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)

我想像 ModelViewSet 的默认分页一样打开分页:

{
"count": 55,
"next": "http://myUrl/?page=2",
"previous": null,
"results": [{...},{...},...,{...}]
}

The official doc说:

Pagination is only performed automatically if you're using the generic views or viewsets

...但是我的结果集根本没有分页。如何分页?

最佳答案

对于那些使用 DRF 3.1 或更高版本的用户,他们正在更改处理分页的默认方式。见 http://www.django-rest-framework.org/topics/3.1-announcement/了解详情。

现在,如果您想为 ModelViewSet 启用分页,您可以通过在 settings.py 文件中进行设置来全局执行此操作:

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 100
}

或者,如果您只想为一个 ModelViewSet 设置它,您可以手动为该 View 集设置 pagination_class。

from rest_framework.pagination import PageNumberPagination

class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000

class FooViewSet(viewsets.ModelViewSet):
pagination_class = StandardResultsSetPagination

这还允许您调整仅针对该 View 集处理分页的方式。

DRF 3.1 还引入了可以使用的新类型的默认分页方案,例如 LimitOffset 和 Cursor。

关于python - Django 休息框架 : turn on pagination on a ViewSet (like ModelViewSet pagination),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com