select_related() и prefetch_related().
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() в зависимости от типа связи.
Оцени свой прогресс