Знаешь ли в Django методы select_related и prefetch_related

Python Middle Без компании
Знаешь ли в Django методы select_related и prefetch_related
Ответы
Оба метода используются для оптимизации запросов к БД, но работают по-разному. `select_related` создаёт SQL JOIN и загружает связанные объекты за один запрос. Подходит для ForeignKey и OneToOne полей. ``` # Загружает автора вместе с книгой за один запрос Book.objects.select_related('author').get(id=1) ``` `prefetch_related` делает отдельный запрос для каждой связи и "соединяет" результаты на уровне Python. Оптимален для ManyToMany и обратных ForeignKey связей. ``` # Сначала книги, потом их жанры (2 запроса) Book.objects.prefetch_related('genres').all() ``` **Ключевые различия:** - `select_related` - JOIN в SQL, `prefetch_related` - отдельные запросы - `select_related` для "один-к-одному", `prefetch_related` для "многие-ко-многим" - `select_related` экономит время на запросах, `prefetch_related` - на памяти