在查询具有多个prefetch_related关系的模型时,我使用了m2m:
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:缓存的信息与数据库在desync中,我不担心这个特定的问题。
发布于 2018-06-01 12:39:38
这很容易为你自己check the queries that Django is running。
当我尝试时,似乎obj.things.exists()在预取things时不会引起任何额外的查询。
发布于 2022-07-11 11:26:01
要只捕获与things1有关系的对象,可以在查询中这样做:
context.mymodel_set.prefetch_related(
'things1', 'things2', 'things3'
).filter(
things1__isnull=False
)https://stackoverflow.com/questions/50642806
复制相似问题