Когда QuerySet выполняет запросы к БД
Python
Middle
Без компании
Когда QuerySet выполняет запросы к БД
Ответы
QuerySet в Django ленив — запрос к БД выполняется только при необходимости. Это происходит в следующих случаях:
- **Итерация** по QuerySet (например, в цикле `for`).
- **Срезы** с указанием шага (`[::2]`), но не простые срезы (`[:5]`).
- **Вызов `len()`**, `list()`, `bool()` или проверка в `if`.
- **Сериализация** (например, при рендеринге шаблона).
- **Явный вызов `exists()`**, `count()`, `get()` или `first()`.
Пример:
```
# Запрос не выполнен
qs = MyModel.objects.filter(active=True)
# Запрос выполнится здесь
for obj in qs:
print(obj.name)
# И здесь (новый запрос)
active_count = qs.count()
```
Ленивая загрузка позволяет комбинировать цепочки фильтров без лишних запросов.