Как работают QuerySet в Django
Python
Senior
Без компании
Как работают QuerySet в Django
Ответы
QuerySet в Django — это лениво (lazy) оцениваемая коллекция объектов модели. Он не выполняет запрос к БД до тех пор, пока не будет явно запрошен результат (например, итерация, печать, вызов `list()` и т. д.).
**Пример:**
```
# Запрос не выполняется сразу
queryset = User.objects.filter(is_active=True)
# Запрос выполняется только здесь (при итерации)
for user in queryset:
print(user.username)
```
**Ключевые особенности:**
- **Цепочка методов:** Можно строить цепочки фильтров (`filter()`, `exclude()`), которые объединяются в один SQL-запрос.
- **Кеширование:** При первом выполнении QuerySet кеширует результаты.
- **Ленивость:** Запросы выполняются только при необходимости.
- **Методы, вызывающие запрос:** `len()`, `list()`, `bool()`, итерация, срезы (`[5:10]`).
**Пример с цепочкой:**
```
active_users = User.objects.filter(is_active=True).exclude(is_staff=True)
```