Встречается на собеседованиях • сегодня
Как делать JOIN в Django ORM
В Django ORM JOIN выполняется автоматически при использовании связанных полей (ForeignKey, OneToOneField, ManyToManyField). Основные способы:
- select_related() - для ForeignKey и OneToOne (SQL INNER JOIN)
python
# Получает автора вместе с книгой за один запрос
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # Не вызывает дополнительных запросов- prefetch_related() - для ManyToMany и обратных ForeignKey (отдельный запрос + JOIN в Python)
python
# Оптимально получает все книги и их жанры
authors = Author.objects.prefetch_related('books').all()
for author in authors:
for book in author.books.all(): # Не вызывает N+1 проблему
print(book.title)- Фильтрация по связанным полям (автоматический JOIN)
python
# Находит книги автора с именем "John"
books = Book.objects.filter(author__name='John')- values()/values_list() с выборкой связанных полей
python
# Получает пары "название книги - имя автора"
Book.objects.values('title', 'author__name')
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы