Как добавить пагинацию в django ReadOnlyModelViewSet или ListAPIView?

У меня есть проект Django Restframework. Вот мой вид:

class JobView(viewsets.ReadOnlyModelViewSet):
    queryset = Job.objects.all()
    serializer_class = JobSerializer
    filter_backends = [filters.OrderingFilter, DjangoFilterBackend, filters.SearchFilter]
    search_fields = [...]
    ordering_fields = ['jobId']
    ordering = ['-jobId']
    filterset_fields = ['jobId', 'status']
    pagination_class = StandardResultsSetPagination

и мой класс пагинации:

class StandardResultsSetPagination(LimitOffsetPagination):
    page_size = 1

Представление зарегистрировано в маршрутизаторе:

router.register(r'jobs', JobView)

Проблема в том, что он вообще не делает пагинацию. Он просто игнорирует атрибут pagination_class.

Я также пробовал:

class JobView(generics.ListAPIView)

И зарегистрировал вид без маршрутизатора. Но проблема та же. Он не пагинация и просто возвращает json список со всеми заданиями.

Как добиться пагинации в этом представлении, не определяя ее глобально для проекта в settings.py?

Наследует ли ваш StandardResultsSetPagination правильный стиль пагинации? LimitOffsetPagination по умолчанию не ограничивает вывод (помимо настройки PAGE_SIZE) и требует параметров запроса для установки ограничения. Он также не имеет атрибута класса page_size, в отличие от PageNumberPagination.

Попробуйте заменить ваш класс пагинации на следующий код

from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
    page_size = 5
    page_size_query_param = 'page_size'

Если вы не задали default_limit и вызываете /jobs, он отобразит результат как обычно. В случае LimitOffsetPagination вам нужно либо указать limit и offset в запросе, либо указать default_limit, чтобы увидеть разницу.

Вернуться на верх