我在查询具有多个 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/

10-13 03:53