PRO

Что такое Django ORM? Как выполнить JOIN через ORM?

Django ORM позволяет работать с базой данных через Python-модели и QuerySet вместо ручного написания SQL. JOIN обычно формируется автоматически при обращении к полям связанных моделей через двойное подчёркивание или при использовании select_related() и prefetch_related().
Подробный ответ

Что такое Django ORM

ORM, или Object-Relational Mapping, — это слой, который связывает Python-классы с таблицами базы данных. В Django модели описывают таблицы, а QuerySet и менеджер objects позволяют создавать, получать, обновлять и удалять записи без ручного SQL в большинстве случаев.

JOIN через связи моделей

Если модели связаны, Django ORM сам построит нужный JOIN при фильтрации по полям связанной модели. Для перехода по связи используют двойное подчёркивание.

articles = Article.objects.filter(author__username='alice')

В этом примере Django выберет статьи, у которых у связанного автора поле username равно alice.

Оптимизация запросов

select_related() используют в основном для ForeignKey и OneToOneField: связанные данные подгружаются SQL JOIN-ом в одном запросе. prefetch_related() чаще используют для ManyToManyField и обратных связей: Django делает отдельные запросы и объединяет результаты в Python.

articles = Article.objects.select_related('author')
articles = Article.objects.prefetch_related('tags')

Как ответить на собеседовании

Django ORM позволяет работать с таблицами как с Python-моделями. JOIN обычно не пишут вручную: Django строит его при переходе по связям, например через author__username; для оптимизации я использую select_related() или prefetch_related() в зависимости от типа связи.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге