我有一个带有许多外键字段的模型,例如model具有字段'type','level','color','intensity'的产品(只是一个通用示例) .
然后,我有一个页面,使用Type表单编辑给定类型的所有产品,产品作为内联formset,并可选择使用 extra=10
内联添加其他产品 .
我觉得非常奇怪的是,每次当我输出模板上的一个外键选择字段时,Django会查询数据库以获取选项(每次) .
例如:
{% for form in formset %}
{{ form.level }}
{{ form.color }}
{{ form.intensity }}
{% endfor %}
有20个产品(和10个空的额外表格),上面的代码从级别,颜色和强度总共发出90个查询(使用Django调试工具栏显示),其中3个就足够了 . 这些选项不太可能在请求中改变,但即使它们确实如此,我绝对不希望一些新添加的选项仅出现在最后5个表单中 .
Is there any way to optimize my models/forms/views/templates so that the database doesn't get hammered like this unnecessarily?
免责声明:我对django和python相对较新,并且不禁想到必须有办法以某种方式解决这个问题 .
2 回答
您可以change the queryset used by the formset,然后您可以使用select_related()生成FK连接,而不是在每个forloop迭代中执行查询 .
像这样 .