Как работает lazy loading в Django
Python
Middle
Без компании
Как работает lazy loading в Django
Ответы
Lazy loading в Django — это механизм отложенной загрузки данных, который позволяет избежать лишних запросов к БД до момента реального использования объекта.
**Основные примеры:**
- **Lazy QuerySet** — запрос не выполняется до итерации, среза или явного вызова `list()/exists()`:
```
users = User.objects.all() # Запрос не выполнен
print(users[0]) # Только сейчас Django делает SQL-запрос
```
- **Отношения (ForeignKey, OneToOne, ManyToMany)** — загружаются только при обращении:
```
user = User.objects.get(id=1) # Запрос только для User
print(user.profile.bio) # Дополнительный запрос для Profile
```
**Как избежать N+1 проблемы:**
Используйте `select_related` (для ForeignKey/OneToOne) и `prefetch_related` (для ManyToMany):
```
User.objects.select_related('profile').get(id=1) # Загрузит User и Profile одним запросом
```
**Важно:** Lazy loading экономит ресурсы, но требует аккуратного обращения, чтобы не генерировать лишние запросы.