Адаптация глобальной настройки PAGE_SIZE в Django REST Framework's browsable API к другой локальной настройке PAGE_SIZE

Мы используем Django REST Framework с пагинацией и просматриваемым API.

Глобальный параметр для размера страницы в settings.py установлен в 10000 для того, чтобы получить более высокую производительность при обращении к API через HTTP запросы, что работает хорошо:

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "rest_framework.authentication.SessionAuthentication",
        "rest_framework.authentication.TokenAuthentication",
    ],
    "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
    "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
    "PAGE_SIZE": 10000,
}

Теперь проблема в том, что это напрямую связано с browsable API, который также перечисляет 10000 записи на странице. Это, конечно, занимает очень много времени или даже ломается в некоторых браузерах.

Есть ли способ изменить это поведение локально для просматриваемого API?

Заранее спасибо!

Я нашел решение, используя пользовательский класс пагинации, например, в utils.py:

from rest_framework.pagination import PageNumberPagination


class AdjustableResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = "page_size"
    max_page_size = 10000

, который можно использовать в views.py:

from rest_framework import viewsets
from .utils import AdjustableResultsSetPagination


class RestrictedViewSet:
    """
    Parent view that restricts viewers without authentication.
    """
    # ...
    pagination_class = AdjustableResultsSetPagination


class DeviceViewSet(RestrictedViewSet, viewsets.ModelViewSet):
    # ...
    pass

и позволяет установить page_size вручную, например, через:

GET /api/addresses/?page_size=5

Спасибо Андрею за то, что направил меня в нужном направлении!

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