PageNumberPagination и набор запросов без фиксированного порядка
Согласно документации, ничего особенного не требуется для включения нумерации страниц при использовании класса, наследуемого от GenericAPIView
,
Я посмотрел в коде django и django rest framework и набор запросов ViewSet не выглядит упорядоченным. Пагинация добавляет только ключевые слова SQL LIMIT
а также OFFSET
на запрос.
Я не понимаю, как обрабатывается набор запросов, который не имеет детерминированного порядка? Почему в документации не сказано добавить .order_by()
оператор в конце набора запросов ViewSet?
1 ответ
Запросы без явного порядка должны быть специфичными для базы данных, и нет никакой гарантии, что вы получите отсортированный набор результатов (если django не сортирует по id по умолчанию), пожалуйста, смотрите здесь для аналогичного ответа.
Порядок необходим для правильной работы нумерации страниц. Без этого у вас может быть несколько строк, повторяющихся на разных страницах, и несколько пропущенных. Это также упоминается в django docs:
Для последовательной разбивки на страницы QuerySets следует упорядочить, например, с помощью предложения order_by() или с порядком по умолчанию в модели.
https://docs.djangoproject.com/en/2.2/topics/pagination/
Также стоит прочитать эту статью о порядке по умолчанию: https://docs.microsoft.com/pl-pl/archive/blogs/conor_cunningham_msft/no-seatbelt-expecting-order-without-order-by