Ленивые отношения загрузки в Django (и другой MVCs/ORMs)

Существует драгоценный камень Ruby под названием HAML, который поставлется с исполняемым файлом, названным css2sass. Тот исполняемый файл переводит CSS в ДЕРЗОСТЬ , который является метаязыком сверху CSS, который делает намного легче осуществить рефакторинг (лучшим иллюстрированием отношений среди Ваших селекторов). Могло бы стоить смотреть.

5
задан nategood 6 July 2009 в 04:07
поделиться

1 ответ

Общий ответ состоит в том, что Django принимает решение выполнить запрос, когда вы действительно запрашиваете некоторые записи. Чаще всего это означает перебор набора запросов ( для записи в наборе запросов: ) или использование встроенной функции list () для преобразования набора запросов в список.

См. При оценке QuerySets для получения дополнительных сведений из официальных документов.

Это достигается путем определения класса, называемого QuerySet в django / db / models / query.py , где специальные методы, такие как __ repr __ , __ getitem __ и __ iter __ , закодированы так, чтобы действовать правильно.

Если вам нужно принудительно выполнить загрузку, просто запустите встроенную функцию списка Python в наборе запросов, например:

qs = SomeModel.objects.all()
ql = list(qs)

Этот вызов list () выполнит запрос к БД и загрузит все объекты в память. Это должно происходить довольно редко, но в одном случае вам нужно использовать результаты запроса в нескольких местах ваших шаблонов. Преобразование в список и передача списка в контексте вашего шаблона будет выполнять запрос только один раз, а не один раз для каждого места в вашем шаблоне, который вы повторяете.

12
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

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