Встречается на собеседованиях • сегодня

Какие знаешь способы оптимизации для получения данных через Django ORM

Используйте select_related() для ForeignKey и OneToOneField, чтобы уменьшить количество запросов при обращении к связанным объектам. Для ManyToManyField и обратных ForeignKey используйте prefetch_related(), который делает отдельный запрос для каждой связи.

Пример:

python
# Плохо: N+1 запрос
books = Book.objects.all()
for book in books:
    print(book.author.name)  # Новый запрос для каждого автора

Хорошо: 1 запрос

books = Book.objects.select_related('author').all()

text

Используйте `only()` и `defer()` для загрузки только нужных полей:
```python
# Загружаем только title и author_id
books = Book.objects.only('title', 'author')

Для агрегации и аннотации применяйте annotate() и aggregate() вместо обработки в Python:

python
from django.db.models import Count
books = Book.objects.annotate(num_authors=Count('authors'))

Используйте values() и values_list() для получения словарей/кортежей вместо полноценных объектов, если не нужны методы модели.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы