Django rest framework APIView Pagination EmptyPage

Удалось заставить пагинацию работать, и вот мой код:

from rest_framework import pagination


class CustomPagination(pagination.PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 10
    page_query_param = 'p'


class PaginationHandlerMixin(object):
    @property
    def paginator(self):
        if not hasattr(self, '_paginator'):
            if self.pagination_class is None:
                self._paginator = None
            else:
                self._paginator = self.pagination_class()
        else:
            pass
        return self._paginator
    
    def paginate_queryset(self, queryset):
        if self.paginator is None:
            return None
        return self.paginator.paginate_queryset(queryset, self.request, view=self)
    
    def get_paginated_response(self, data):
        assert self.paginator is not None
        return self.paginator.get_paginated_response(data)

и вот мой класс представления:

class OrderOntrackViewPaginated(APIView, PaginationHandlerMixin):
    queryset = Order.objects.filter(~Q(staged__iexact="offtrack")).values().order_by('-id')
    serializer_class = OrderSerializer
    pagination_class = CustomPagination

    permission_classes = (permissions.AllowAny,)
    http_method_names = ['get']

    def get(self, request):
        results = self.paginate_queryset(self.queryset)
        serializer = self.serializer_class(results, many=True)
        return self.get_paginated_response(serializer.data)

Мой вопрос в том, могу ли я обработать EmptyPage так, чтобы если максимальная страница, например, 3 и пользователь помещает ...?p=4 в запрос, я мог бы вернуть правильный ответ.

Я думаю, что можно было бы легко использовать ListAPIView следующим образом:

from rest_framework.generics import ListAPIView

class OrderOntrackViewPaginated(ListAPIView):
    queryset = Order.objects.exclude(staged__iexact="offtrack").order_by('-id')
    serializer_class = OrderSerializer
    pagination_class = CustomPagination
    permission_classes = (permissions.AllowAny,)
    http_method_names = ['get']

Надеюсь, это поможет вам. С уважением!

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