Комбинирование упорядочивания и пагинации в Django

Я использую rest_framework.pagination.LimitOffsetPagination в сочетании с фильтром сортировки Django (с filter_backends = [OrderingFilter] и ordering_fields в моем представлении). Проблема в том, что Django, похоже, применяет сортировку к результатам пагинации, а не наоборот.

Аналогия со списком:

Если результаты get_queryset являются: ['b', 'e', 'c', 'a', 'd', 'f']

Сначала применяется пагинация (например, с ограничением 3): ['b', 'e', 'c']

Затем результаты сортируются: ['b', 'c', 'e']

Результат, который я ожидал бы, однако, таков: ['a', 'b', 'c']

Есть идеи, как я могу заставить сортировку применяться перед пагинацией?

Заранее большое спасибо.

Реализация списка по умолчанию применяет фильтр перед пагинацией, убедитесь, что вы не перезаписали list и не вызвали super.

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)

Также OrderingFilter - странное название, поскольку фильтр предназначен не для сортировки, а для удаления некоторых записей. Убедитесь, что вы упорядочили в наборе запросов:

class AbcViewSet(ViewSet):
   queryset = Cde.objects.filter(...).order_by("id")
Вернуться на верх