【问题标题】:DRF Pagination page_size not working with ModelViewSetDRF 分页 page_size 不适用于 ModelViewSet
【发布时间】:2021-10-13 08:27:32
【问题描述】:

我正在尝试同时使用 ModelViewSet 和 PageNumberPagination,但似乎无法让 page_size 正常工作。我已将尺寸设置为 200,但它总是列出 200 多个项目。

这是我的代码 sn-p:

class ExamplePagination(pagination.PageNumberPagination):
       page_size = 200
       max_page_size = 200

class VideosViewSet(viewsets.ModelViewSet):
    parser_classes = (FormParser, JSONParser)
    serializer_class = VideoSerializer
    pagination_class = ExamplePagination
    queryset = Video.objects.all()
    
    @swagger_auto_schema(responses={200: VideoSerializer})
    def list(self, request):
        """
        Request to list all videos
        """
        queryset = Video.objects.all().order_by("-published_at")
        if queryset.exists():
            page = self.paginate_queryset(queryset)
            if page is not None:
                serialized = VideoSerializer(queryset, many=True)
                return self.get_paginated_response(serialized.data)
        return Response(status=http_status.HTTP_404_NOT_FOUND)

我尝试了从自定义 mixins 到在 settings.py 中设置页面大小的所有方法 这也是我的 settings.py

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

【问题讨论】:

    标签: django django-rest-framework pagination


    【解决方案1】:

    您应该传递给序列化程序 page 而不是 queryset

        if queryset.exists():
            page = self.paginate_queryset(queryset)
            if page is not None:
                serialized = VideoSerializer(page, many=True)
                return self.get_paginated_response(serialized.data)
        return Response(status=http_status.HTTP_404_NOT_FOUND)
    

    queryset 包含所有对象,而page 已仅包含所需数量的对象。

    【讨论】:

    • 嘿,这并没有解决问题。在我应该得到 200 个的请求中,我仍然得到 339 个视频。
    • @RugvedSomwanshi 如果您的意思是您在回复中看到的计数,没关系。由于分页响应总是返回有关对象总数的信息。它允许前端了解 UI 上显示了多少页面。
    • 非常感谢。完全理解。
    猜你喜欢
    • 2022-11-30
    • 2017-11-27
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多