我在查询具有几个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:与数据库不同步的缓存信息不会让我担心这个特定的问题。
答案 0 :(得分:1)
为自己check the queries that Django is running很容易。
当我尝试使用时,obj.things.exists()
似乎在things
被预取时没有引起任何其他查询。