DRF Pagination page_size не работает с 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
уже содержит только необходимое количество объектов.