【问题标题】:Using prefetch_related() in Django in combination with raw_id_fields在 Django 中结合 raw_id_fields 使用 prefetch_related()
【发布时间】:2021-01-19 15:47:19
【问题描述】:

我正在尝试消除prefetch_related() 的查询。在使用 TabularInline 的管理员中,这适用于所有情况,但由 raw_id_fields = ('article',) 创建的 ForeignKeyRawIdWidget 除外。这是由于 Queryset.get() 确实如此,并且过滤器操作在预取时不应该起作用。所以对于内联中的每一行,我都会得到一个单独的查询。

这篇博文说明了一种解决方法:
https://blog.mounirmesselmeni.de/2017/02/06/accessing-prefetched-objects-inside-your-models-methods/

解决方法对我来说看起来很混乱,并且在这种情况下不起作用,因为小部件会执行 get。是否有一些正确的方法可以在这里进行预取,或者这是 Django 的预取限制?不使用raw_id_fields 不是一个选项,因为默认小部件会执行更多查询。

另外,我不明白为什么过滤器操作在实际查询数据库之前不检查预取缓存。这个小步骤可能会节省大量查询,对吧?

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    仅供参考:我在 Django 项目中有raised an issue。问题已得到承认,但是,修复将过于激烈。

    我使用的解决方法附在问题上并修复了问题(Django 3.2)

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 2016-11-28
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2015-06-08
      相关资源
      最近更新 更多