У меня есть общий вид списка в Django, который возвращает около 300 объектов (если не выполняется поиск).
У меня настроена нумерация страниц для отображения только 10 объектов.
Итак, я запрашиваю базу данных, затем перебираю объекты, обрабатывая их и добавляя дополнительные значения перед отображением. Я заметил, что все 300 объектов обрабатываются, а разбиение на страницы выполняется после обработки. Поэтому я хочу выполнять обработку только тех объектов, которые будут отображаться, чтобы повысить производительность.
Я рассчитываю индексы объектов в наборе запросов, которые должны быть обработаны: 0-10 для страницы 1, 11-20 для страницы 2, 21-30 для страницы 3 и т. д.
Теперь я хочу обрабатывать только объекты в отображаемом диапазоне, но возвращать полный набор запросов (чтобы жанровое представление работало так, как ожидалось).
Сначала я пробовал:
for object in queryset[slice_start:slice_end] :
# process things here
return queryset
Но срез, кажется, возвращает новый набор запросов, а исходные объекты набора запросов не имеют никаких вычисленных значений.
В настоящее время мое решение:
index = -1
for object in queryset:
index += 1
if index < slice_start or index > slice_end : continue
# process things here
return queryset
Теперь это работает, но кажется довольно хакерским и неэлегантным для Python. Есть ли более питонический способ сделать это?