分页无法在我的Django rest框架项目中使用,我正在使用通用视图

2024-09-27 21:29:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了很多选择,但分页仍然不起作用。我使用的通用视图和代码如下:

class ListFood(generics.ListAPIView):

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

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

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"),
    ]

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

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


Tags: selfsizeobjectsfooddefpageallclass
1条回答
网友
1楼 · 发布于 2024-09-27 21:29:47

原始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

相关问题 更多 >

    热门问题