Встречается на собеседованиях • сегодня
Как работают методы 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— отдельные запросы + объединение (лучше для "один-ко-многим" и "многие-ко-многим").

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы