python - 分页不适用于我的 Django Rest 框架项目,并且我正在使用通用 View

标签 python django-rest-framework

我尝试了很多选项,但分页仍然不起作用。我正在使用通用 View 和这样的代码:

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 数据。

最佳答案

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

关于python - 分页不适用于我的 Django Rest 框架项目,并且我正在使用通用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449013/

相关文章:

python - 无法获取 Excel ChartObjects 计数

python - Django休息框架: correctly handle incoming array of model ids

reactjs - 使用 React 前端和 Django REST API 后端时如何实现 Azure Directory 身份验证?

python - 使用 ChoiceField 时类型错误对象不可 JSON 序列化

python - 如何将我自己的 Python 代码与 OpenVino 和英特尔神经计算棒 2 一起使用

python - python分配 "mylist[:] = somelist"与 "mylist = somelist"有何不同

python - 如何放置这些船舶图像?

python - 需要使用 cpanel 通过 cron 作业运行 python 脚本

python - Django Serializer POST 数据未完全传递给序列化器

python - Django REST 框架 : 'WSGIRequest' object has no attribute 'query_params'