我在查询具有多个 m2m 关系的模型时使用 prefetch_related
:
qs = context.mymodel_set.prefetch_related('things1', 'things2', 'things3')
因此,当我这样做时,不需要执行额外的查询来获取
things1
,它们应该已经被获取了:r = list(qs)
r[0].things1.all()
但是如果我做
r[0].things1.exists()
呢?这会生成一个新的查询吗?还是会使用预取的信息?如果它生成一个新的查询,这是否意味着为了存在检查的目的而使用 r[0].things1.all()
更有效?PS:与数据库不同步的缓存信息不会让我担心这个特定问题。
最佳答案
为自己 check the queries that Django is running 很容易。
当我尝试它时,似乎在预取 obj.things.exists()
时 things
没有引起任何额外的查询。
关于python - Django 预取相关并存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50642806/