Я прочитал документацию и все связанные с этим вопросы здесь, но я не совсем понял, как select_related ведет себя с цепочкой / несколькими внешними ключами.
Предположим, у нас есть следующие модели:
class RecordLabel(models.Model):
title = models.CharField(...)
class Band(models.Model):
band_name = models.CharField(...)
class Artist(models.Model):
record_label = models.ForeignKey(RecordLabel,...)
belongs_to_band = models.ForeignKey(Band, ...)
class Producer(models.Model):
customer = models.ForeignKey(Artist, ...)
A. Как мы будем использовать select_related в запросе
Producer.objects.filter(...).select_related(?)
, чтобы всепредварительно загружен?Будет ли это выглядеть так:
Producer.objects.filter(...).select_related(
'customer__record_label', 'customer__belongs_to_band')
и почему?
B. Если у класса Band есть «Жанр» в качестве внешнего ключа,
class Genre(models.Model):
genre_name = models.CharField(...)
class Band(models.Model):
band_name = models.CharField(...)
music_genre = models.ForeignKey(Genres, ...)
тогда, чтобы все было предварительно загружено, мы бы сделали что-то вроде этого:
Producer.objects.filter(...).select_related(
'customer__record_label__music_genre', 'customer__record_label__band_name',
'customer__belongs_to_band__music_genre', 'customer__belongs_to_band__music_genre')
или что-то вроде этого:
Producer.objects.filter(...).select_related(
'customer__record_label__music_genre', 'customer__record_label__band_name',
'customer__belongs_to_band', 'customer__belongs_to_band')