是否可以使用单个查询检索模型的所有多个字段?

时间:2016-05-18 08:47:53

标签: python django django-queryset django-orm

假设我的模型包含大约10个ManyToManyFields。是否可以使用单个查询查询模型的所有字段?如果没有,我如何获得尽可能少的数据库查询的字段(我使用的是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()似乎很贵。

1 个答案:

答案 0 :(得分:2)

您可以使用prefetch_related

queryset = MyModel.objects.prefetch_related(
    'relation_1', 'relation_2', ..., 'relation_10',
)

这将对初始模型使用一个查询,对每个多对多字段使用一个查询(例如,如果您预取10个字段,则为11个查询)。