我在这里阅读了文档和所有相关问题,但我没有正确理解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 有 'Genre' 作为外键,
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')