是否可以通过单个查询检索模型的所有多对多字段?
Is it possible to retrieve all many to many fields of a model with a single query?
假设我有一个包含大约 10 个 ManyToManyField 的模型。是否可以通过单个查询查询模型的所有字段?如果没有,我如何获得尽可能少的数据库查询的字段(我正在使用 django ORM)。
class MyModel(models.Model):
name = models.CharField(max_length=200)
relation_1 = models.ManyToManyField('app1.model_1')
relation_2 = models.ManyToManyField('app1.model_2')
relation_3 = models.ManyToManyField('app1.model_3')
relation_4 = models.ManyToManyField('app1.model_4')
relation_5 = models.ManyToManyField('app2.model_5')
relation_6 = models.ManyToManyField('app2.model_6')
relation_7 = models.ManyToManyField('app3.model_7')
relation_8 = models.ManyToManyField('app3.model_8')
relation_9 = models.ManyToManyField('app3.model_9')
relation_10 = models.ManyToManyField('app3.model_10')
现在看来,MyModel.objects.all()
好贵。
你可以使用 prefetch_related
queryset = MyModel.objects.prefetch_related(
'relation_1', 'relation_2', ..., 'relation_10',
)
这将对初始模型使用一个查询,对每个多对多字段使用一个查询(例如,如果您预取 10 个字段,则使用 11 个查询)。
假设我有一个包含大约 10 个 ManyToManyField 的模型。是否可以通过单个查询查询模型的所有字段?如果没有,我如何获得尽可能少的数据库查询的字段(我正在使用 django ORM)。
class MyModel(models.Model):
name = models.CharField(max_length=200)
relation_1 = models.ManyToManyField('app1.model_1')
relation_2 = models.ManyToManyField('app1.model_2')
relation_3 = models.ManyToManyField('app1.model_3')
relation_4 = models.ManyToManyField('app1.model_4')
relation_5 = models.ManyToManyField('app2.model_5')
relation_6 = models.ManyToManyField('app2.model_6')
relation_7 = models.ManyToManyField('app3.model_7')
relation_8 = models.ManyToManyField('app3.model_8')
relation_9 = models.ManyToManyField('app3.model_9')
relation_10 = models.ManyToManyField('app3.model_10')
现在看来,MyModel.objects.all()
好贵。
你可以使用 prefetch_related
queryset = MyModel.objects.prefetch_related(
'relation_1', 'relation_2', ..., 'relation_10',
)
这将对初始模型使用一个查询,对每个多对多字段使用一个查询(例如,如果您预取 10 个字段,则使用 11 个查询)。