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

Как сделать JOIN таблиц в Django

В Django для выполнения JOIN между таблицами используются механизмы связанных полей (ForeignKey, ManyToManyField, OneToOneField) и методы QuerySet.

Основные способы:

  1. select_related() - для ForeignKey и OneToOne (SQL JOIN)
python
# Получает автора вместе с книгой за один запрос
books = Book.objects.select_related('author').all()
for book in books:
    print(book.author.name)  # Не вызывает дополнительных запросов
  1. prefetch_related() - для ManyToMany и обратных ForeignKey (отдельный запрос)
python
# Получает все книги с их жанрами
books = Book.objects.prefetch_related('genres').all()
for book in books:
    print(book.genres.all())  # Данные уже в кэше
  1. Фильтрация по связанным полям (неявный JOIN)
python
# Найти книги автора с именем 'John'
books = Book.objects.filter(author__name='John')
  1. Аннотации и агрегации через связанные поля
python
from django.db.models import Count
authors = Author.objects.annotate(book_count=Count('books'))

Оптимальный выбор между select_related и prefetch_related зависит от структуры данных и конкретного случая использования.

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

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

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

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