【问题标题】:Does it matter in which order you use prefetch_related and filter in Django?在 Django 中使用 prefetch_related 和 filter 的顺序是否重要?
【发布时间】:2022-01-22 04:44:20
【问题描述】:

标题说明了一切。

我们以这段代码为例:

objs = Model.objects.prefetch_related('model2').filter()
objs.first().model2_set.first().field

                  vs

objs = Model.objects.filter().prefetch_related('model2')
objs.first().model2_set.first().field

问题

当首先使用prefetch_related() 时,Django 是否会在不考虑.filter() 的情况下获取所有ManyToOne/ManyToMany 关系,并且在获取所有内容后应用过滤器?

IMO,这没关系,因为最后仍然执行了一个查询。

提前致谢。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    在哪里指定prefetch_related 并不重要,只要它在获取任何记录之前。我个人把prefetch_relatedselect_related 之类的东西放在一起。和only 在链的末尾,但从代码可读性的角度来看,这对我来说更具表现力。

    但并非所有管理器方法都如此。有些方法确实会根据它们在链中的位置而产生不同的效果,例如order_bydistinct(分组依据)一起使用时可能具有位置意义。

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 2010-10-22
      • 1970-01-01
      • 2016-11-28
      • 2012-10-10
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多