假设我的模型包含大约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()
似乎很贵。
答案 0 :(得分:2)
您可以使用prefetch_related
queryset = MyModel.objects.prefetch_related(
'relation_1', 'relation_2', ..., 'relation_10',
)
这将对初始模型使用一个查询,对每个多对多字段使用一个查询(例如,如果您预取10个字段,则为11个查询)。