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

Как делать JOIN в Django ORM

В Django ORM JOIN выполняется автоматически при использовании связанных полей (ForeignKey, OneToOneField, ManyToManyField). Основные способы:

  1. select_related() - для ForeignKey и OneToOne (SQL INNER JOIN)
python
# Получает автора вместе с книгой за один запрос
books = Book.objects.select_related('author').all()
for book in books:
    print(book.author.name)  # Не вызывает дополнительных запросов
  1. 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)
  1. Фильтрация по связанным полям (автоматический JOIN)
python
# Находит книги автора с именем "John"
books = Book.objects.filter(author__name='John')
  1. values()/values_list() с выборкой связанных полей
python
# Получает пары "название книги - имя автора"
Book.objects.values('title', 'author__name')
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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