Почему в django такая странная пагинация?

Здравствуйте! Недавно начал изучать django и столкнулся с очень странной штукой при использовании пагинации (это после десятка лет работы с PHP).
В документации есть пример:
contact_list = Contact.objects.all() # Получить ВСЕ(!!!) записи???
paginator = Paginator(contact_list, 25) # Разделить список на чанки/страницы


С точки зрения алгоритма - это полный бред. Может я не знаю механизма какого-то в этой конструкции. Но выбирать все записи из БД для того, что бы их поделить - это сумасшествие. А если этих записей 10 млн? Или использование такой конструкции создает запрос с `COUNT` под капотом? После PHP - это казалось идеальным фреймворком. А тут такое разочарование. Как же он все-таки работает?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Queryset ленив, никакой выборки не происходит пока contact_list каким-либо образом не итерируется. Пагинатор под капотом просто добавит к невычисленному queryset'у параметры отбора нужной страницы и передаст в контекст шаблонизатора.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы