Как работает 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 экономит ресурсы, но требует аккуратного обращения, чтобы не генерировать лишние запросы.