diff --git a/backend/api/pagination.py b/backend/api/pagination.py new file mode 100644 index 00000000..17b16382 --- /dev/null +++ b/backend/api/pagination.py @@ -0,0 +1,14 @@ +"""Кастомные классы пагинации для API.""" + +from rest_framework.pagination import PageNumberPagination + + +class StandardPagination(PageNumberPagination): + """Стандартная пагинация с поддержкой параметра page_size. + + Позволяет клиенту указывать размер страницы через параметр page_size, + с ограничением максимального размера страницы. + """ + page_size = 20 + page_size_query_param = 'page_size' + max_page_size = 10000 # Максимальный размер страницы diff --git a/backend/eusrr_backend/settings.py b/backend/eusrr_backend/settings.py index feb83555..37e7b547 100644 --- a/backend/eusrr_backend/settings.py +++ b/backend/eusrr_backend/settings.py @@ -299,7 +299,7 @@ REST_FRAMEWORK = { ], "DEFAULT_THROTTLE_CLASSES": ["rest_framework.throttling.AnonRateThrottle"], "DEFAULT_THROTTLE_RATES": {"anon": "60/min"}, - "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", + "DEFAULT_PAGINATION_CLASS": "api.pagination.StandardPagination", "PAGE_SIZE": 20, } diff --git a/backend/requests_app/views.py b/backend/requests_app/views.py index 3d2da97d..bdc83472 100644 --- a/backend/requests_app/views.py +++ b/backend/requests_app/views.py @@ -267,7 +267,7 @@ class RequestsView(LoginRequiredMixin, TemplateView): # Загружаем список сотрудников для фильтра employees = [] - ok_emp, data_emp, _ = _api_unpack(api.get("v1/employees/", params={"page_size": 1000})) + ok_emp, data_emp, _ = _api_unpack(api.get("v1/employees/", params={"page_size": 10000})) if ok_emp: employees_results, _, _, _ = _parse_page_payload(data_emp) employees = employees_results @@ -297,7 +297,7 @@ class RequestsView(LoginRequiredMixin, TemplateView): # Загружаем список сотрудников для фильтра employees = [] - ok_emp, data_emp, _ = _api_unpack(api.get("v1/employees/", params={"page_size": 1000})) + ok_emp, data_emp, _ = _api_unpack(api.get("v1/employees/", params={"page_size": 10000})) if ok_emp: employees_results, _, _, _ = _parse_page_payload(data_emp) employees = employees_results