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

Как работают методы select_related и prefetch_related

select_related и prefetch_related — методы Django ORM для оптимизации запросов к БД при работе со связанными объектами.

select_related
Используется для связей ForeignKey и OneToOne. Выполняет SQL JOIN, загружая связанные объекты одним запросом.
Пример:

python
# Без select_related: N+1 запросов
books = Book.objects.all()
for book in books:
    print(book.author.name)  # Доп. запрос для каждого автора

С select_related: 1 запрос

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

text

**`prefetch_related`**  
Работает для `ManyToMany` и обратных `ForeignKey`. Выполняет отдельный запрос для связи, затем объединяет результаты в Python.  
Пример:
```python
# Без prefetch_related: N+1 запросов
authors = Author.objects.all()
for author in authors:
    print(author.books.all())  # Доп. запрос для каждой коллекции книг

# С prefetch_related: 2 запроса
authors = Author.objects.prefetch_related('books').all()

Разница:

  • select_related — JOIN в SQL (лучше для "один-к-одному").
  • prefetch_related — отдельные запросы + объединение (лучше для "один-ко-многим" и "многие-ко-многим").
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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