Комбинирование упорядочивания и пагинации в 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")