【发布时间】: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 不是一个选项,因为默认小部件会执行更多查询。
另外,我不明白为什么过滤器操作在实际查询数据库之前不检查预取缓存。这个小步骤可能会节省大量查询,对吧?
【问题讨论】: