【问题标题】:Is it possible to retrieve all many to many fields of a model with a single query?是否可以通过单个查询检索模型的所有多对多字段?
【发布时间】:2016-09-14 15:23:58
【问题描述】:

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

【问题讨论】:

    标签: python django django-queryset django-orm


    【解决方案1】:

    你可以使用prefetch_related

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2014-11-06
      • 2011-12-24
      • 2023-03-22
      • 2013-07-13
      • 2014-05-27
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多