ORM не загружают данные до тех пор, пока не будет выбрана строка:
query_results = Foo(id=1) # No sql executed yet, just stored.
foo = query_results[0] # now it fires
или
for foo in query_results:
foo.bar() # sql fires
Если вы используете пользовательский источник данных, который загружает результаты при инициализации, тогда разбиение на страницы не будет работать должным образом, так как все каналы будут выбраны одновременно. Вы можете захотеть создать подкласс __getitem__
или __iter__
для фактической выборки. Затем он будет совпадать с тем, как Django ожидает загрузки результатов.
Для нумерации страниц нужно знать, сколько существует результатов для таких вещей, как has_next (). В sql это обычно недорого, чтобы получить count(*)
с индексом. Таким образом, вы также хотели бы знать, сколько будет результатов (или, может быть, просто оценить, если точно знать, что это слишком дорого).