DRF 分页 page_size 不适用于 ModelViewSet
DRF Pagination page_size not working with ModelViewSet
我正在尝试同时使用 ModelViewSet 和 PageNumberPagination,但似乎 page_size 无法正常工作。我已将尺码设置为 200,但它总是列出 200 多件商品。
这是我的代码片段:
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)
我在 settings.py 中尝试了从自定义混合到设置页面大小的所有方法
这也是我的settings.py
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
'PAGE_SIZE': 200,
}
您应该传递给序列化器 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
已仅包含所需的对象数。
我正在尝试同时使用 ModelViewSet 和 PageNumberPagination,但似乎 page_size 无法正常工作。我已将尺码设置为 200,但它总是列出 200 多件商品。
这是我的代码片段:
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)
我在 settings.py 中尝试了从自定义混合到设置页面大小的所有方法 这也是我的settings.py
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
'PAGE_SIZE': 200,
}
您应该传递给序列化器 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
已仅包含所需的对象数。