是否可以通过单个查询检索模型的所有多对多字段?

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 个查询)。