Как выполнить подкачку данных на уровне модели (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 2

1 ответ:

Ваш анализ неверен. Вы не передаете полный набор сообщений в paginator.

Наборы запросов являются ленивыми и не вычисляются в итерации: в случае paginator он будет разрезать объект-что приводит к ограничению / смещению, добавляемому в SQL-запрос перед его отправкой в БД. Будет извлечено не более страницы результатов.