分页不适用于我的Django rest框架项目,并且我使用的是通用视图

时间:2019-08-11 09:59:10

标签: python django-rest-framework

我尝试了很多选择,但是分页仍然不起作用。我正在使用通用视图和类似这样的代码:

settings.py

REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 20 } 中,我这样写:

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

class ListFood(generics.ListAPIView):

    queryset = Food.objects.all()
    serializer_class = FoodSerializer
    pagination_class = LargeResultsSetPagination

    def list(self,request):
        queryset = self.get_queryset()
        serializer = FoodSerializer(queryset, many=True)
        return Response(serializer.data)

我试图修改分页样式的特定方面,例如:

urls.py

但是它仍然没有用。

我的app_name = "lab" urlpatterns = [ re_path('^food/$', ListFood.as_view(), name="listfood"), ] 是:

http://127.0.0.1:8000/api/food/?page=1

没有错误消息,但是当我请求URL http://127.0.0.1:8000/api/food/?page=2或{{1}}

它仍然没有分页。 Django用JSON给了我2000条数据。

1 个答案:

答案 0 :(得分:0)

原始的list实现会分摊响应:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)

您的类使用自定义实现覆盖list,因此它不返回分页响应。只是不要覆盖list