Запросы к базе данных при использовании QuerySet происходят в несколько ключевых моментов, а не при самом создании QuerySet. Это связано с "ленивой" природой работы QuerySet.
Основные сценарии выполнения запросов:
for или используете функции, такие как list(), tuple(), set().queryset[start:end]) без шага (queryset[start:end:step]). Запрос выполняется для получения запрошенного диапазона объектов. Cрезы с отрицательным шагом или шагом отличным от 1 приводят к выполнению запроса для всего QuerySet, а затем к обработке в Python.str(queryset) или repr(queryset).if queryset:). Запрос выполняется, чтобы проверить наличие хотя бы одной записи.count(), sum(), avg(), max(), min() и других функций агрегации.get(), first(), latest().if not queryset:.Примеры:
python
Важно понимать, что Django кэширует результаты QuerySet после первого выполнения запроса. Последующие операции над тем же QuerySet (который уже был оценен) будут использовать кэшированные данные и не будут выполнять повторные запросы к базе данных. Однако, если вы измените QuerySet (например, добавите новый фильтр), это создаст новый QuerySet, который еще не был оценен, и при следующей операции, требующей доступа к данным, произойдет новый запрос.