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
Django 使用select_子类对反向外键进行2级预取_Django_Django 1.8 - Fatal编程技术网

Django 使用select_子类对反向外键进行2级预取

Django 使用select_子类对反向外键进行2级预取,django,django-1.8,Django,Django 1.8,我一直在研究2级反向foreignkey,第二级继承了子类。我正在使用django模型UTIL进行继承。我不停地调整预回迁命令,直到在这篇文章中找到了遍历查询集的答案 我的问题是, 1) 打印查询时,我看不到与反向外键表的内部联接。这是因为预取将它们拉入一个单独的查询中吗 print product_types.query 2) 遍历中的.all()是否命中数据库?还是django从一次预取中提取数据 pt.bevtank_set.all() 3) 总的来说,关于如何找出我真正的疑问,

我一直在研究2级反向foreignkey,第二级继承了子类。我正在使用django模型UTIL进行继承。我不停地调整预回迁命令,直到在这篇文章中找到了遍历查询集的答案

我的问题是,
1) 打印查询时,我看不到与反向外键表的内部联接。这是因为预取将它们拉入一个单独的查询中吗

print product_types.query  
2) 遍历中的.all()是否命中数据库?还是django从一次预取中提取数据

pt.bevtank_set.all()
3) 总的来说,关于如何找出我真正的疑问,有什么建议吗?我不想做一些能满足我需要的事情,但做一些能满足我需要的事情


非常感谢您抽出时间

是,
prefetch\u related
在一个单独的查询中获取相关表,因此您不会看到内部联接

如果您已预取了
bevtank\u集
,则
pt.bevtank\u集.all()
不会引起任何其他查询。但是,
pt.bevtank\u set.filter()
将导致额外的查询。您可以使用Django 1.7+中的对象从预取的queryset中预取过滤器


关于一般提示,查看SQL查询可能很有用。如果存在重复的查询,通常表示您可以添加
选择相关的
预回迁相关的
,以提高性能。

感谢工具栏提示!我有一个后续问题。所以我确实预取了类,因为我必须在第二层调用select_subclass()。将此数据交给模板显示的首选方式是什么?通常,我使用values()提取所需的字段,并将这些数据交给模板进行渲染。在这种情况下,我不能调用values(),因为没有内部联接。我是否需要通过遍历生成一个单独的dict,然后将其交给模板?我不确定我是否理解您的数据模型,因此我不知道将其传递给模板的最佳方式。如果在视图中创建一个单独的dict对您有效,那听起来不错。