【发布时间】:2013-01-19 01:33:03
【问题描述】:
我正在使用 Django 来实现一个工程管理系统。我在某处确实出错了,并且我的 SQL 查询计数在某些页面上非常高。
例如,我在一个简单的 ListView 页面中获得了 95 到 98 个 SQL 查询。所有的查询都是一样的:
SELECT * FROM "syncoor_codification" LIMIT 21
它们总是返回相同的对象。我怀疑查询是由我的模型的 get_queryset() 函数触发的。
如果我使用 Django 调试工具栏,我可以看到查询是在模板内部触发的,如下所示:
{% extends 'syncoor/base.html' %}
{% extends 'syncoor/docs/base.html' %}
{% extends 'syncoor/docs/codifications/base.html' %}
{% include 'syncoor/js/jsp.js' %}
我怎样才能摆脱这种额外的开销?
编辑:这是截图:
【问题讨论】:
-
你知道
LIMIT 21来自哪里吗?当您打印查询集时,例如print MyModel.objects.all(),它不会打印所有结果,因为出于舒适目的,它会自动将请求限制为 21。所以我的猜测是你有一些无用的print用LIMIT 21触发这些请求。不过,我不知道为什么它们会被include和extends触发。 -
请发布模板并查看源代码。