Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django预取相关且存在_Python_Django_Django 1.8 - Fatal编程技术网

Python Django预取相关且存在

Python Django预取相关且存在,python,django,django-1.8,Python,Django,Django 1.8,查询具有多个m2m关系的模型时,我使用的是prefetch\u related: qs = context.mymodel_set.prefetch_related('things1', 'things2', 'things3') 因此,当我这样做时,不需要执行额外的查询来获取内容1,它们应该已经被获取了: r = list(qs) r[0].things1.all() 但是如果我执行r[0]。things1.exists(),该怎么办?这会生成一个新的查询吗?还是会使用预取的信息?如果它生

查询具有多个m2m关系的模型时,我使用的是
prefetch\u related

qs = context.mymodel_set.prefetch_related('things1', 'things2', 'things3')
因此,当我这样做时,不需要执行额外的查询来获取
内容1
,它们应该已经被获取了:

r = list(qs)
r[0].things1.all()
但是如果我执行
r[0]。things1.exists()
,该怎么办?这会生成一个新的查询吗?还是会使用预取的信息?如果它生成一个新的查询,这是否意味着为了进行存在性检查而选择
r[0].things1.all()
更有效

PS:缓存信息与数据库的去同步不会让我担心这个问题。

你自己很容易找到


当我尝试它时,似乎
obj.things.exists()
在预取
things
时没有引起任何额外的查询。

我正在用
shell\u plus--print sql
r[0]进行测试。things1.all()
似乎正在查询数据库。但是当我执行
r[0]时,things1.exists()
没有打印任何内容。看起来我错了-似乎
exists()
在预取
内容时不会导致额外的查询。您的
r[0]。things.all()
不应该引起任何额外的查询-这就是预取的要点。您还没有显示查询是什么——可能是您的
\uu str\uu
方法导致了外键查找。