Как выполнить подкачку данных на уровне модели (django)
В Джанго есть Paginator
. from django.core.paginator import Paginator
.
Но этот пагинатор должен получить все данные, чтобы накормить его.
простой пример:
def getMsgByPage():
page =2
messages = Message.objects.filter(participation__scene=scene, status='W')
paginator = Paginator(messages , 50)
page_obj = paginator.page(page)
return page_obj
Каждый раз, когда пользователь просматривает страницу, Я должен получать все сообщения, чтобы генерировать это.Вы знаете, это очень плохо, когда messages table
содержат огромные данные.
Итак, как я могу отобразить данные сообщений на уровне модели? Или я должен создать хранимую процедуру подкачки, чтобы сделать это? Но django, похоже, не поддерживает хранимые процедуры ...
1 ответ:
Ваш анализ неверен. Вы не передаете полный набор сообщений в paginator.
Наборы запросов являются ленивыми и не вычисляются в итерации: в случае paginator он будет разрезать объект-что приводит к ограничению / смещению, добавляемому в SQL-запрос перед его отправкой в БД. Будет извлечено не более страницы результатов.