Django预取相关并存在

时间:2018-06-01 11:51:14

标签: python django django-1.8

我在查询具有几个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:与数据库不同步的缓存信息不会让我担心这个特定的问题。

1 个答案:

答案 0 :(得分:1)

为自己check the queries that Django is running很容易。

当我尝试使用时,obj.things.exists()似乎在things被预取时没有引起任何其他查询。