> Как в Django ORM выбрать конкретное поле из связанной таблицы или загрузить связанные таблицы? (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: Instories

Стек: Python

> Пример ответа

Для выбора конкретного поля из связанной таблицы в Django ORM используется метод values() или values_list() с двойным подчеркиванием для указания связи. Например, если есть модели Author и Book, где Book имеет внешний ключ на Author, чтобы получить только названия книг и имена авторов:

PYTHON
books = Book.objects.values('title', 'author__name')

Чтобы загрузить связанные таблицы целиком, применяется метод select_related() для ForeignKey и OneToOneField (выполняет JOIN в SQL) или prefetch_related() для ManyToManyField и обратных связей (выполняет отдельные запросы с последующей оптимизацией). Пример:

PYTHON
# Загрузка автора вместе с книгой (один запрос)
books = Book.objects.select_related('author').all()
# Загрузка книг для каждого автора (два запроса)
authors = Author.objects.prefetch_related('book_set').all()

select_related эффективен для "жадной" загрузки при прямых связях, а prefetch_related - для обратных и многих-ко-многим, избегая N+1 запросов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью