我有一个包含许多外键字段的模型,例如具有“类型”、“级别”、“颜色”、“强度”字段的模型产品(只是一个通用示例)。
然后我有一个页面可以使用 Type 表单编辑给定类型的所有产品,并将产品作为内联表单集,并可以选择使用 extra=10
内联添加其他产品。
我觉得很奇怪的是,每次当我在模板上输出一个外键选择字段时,Django 都会查询数据库以获取选项(每次)。
例如:
{% for form in formset %}
{{ form.level }}
{{ form.color }}
{{ form.intensity }}
{% endfor %}
对于 20 个产品(和 10 个空的额外表单),上面的代码从级别、颜色和强度发出 30 个 select * from ...
总共 90 个查询(使用 Django 调试工具栏显示),其中3应该足够了。这些选项不太可能在请求中更改,但即使它们更改了,我绝对不希望一些新添加的选项仅出现在最后 5 个表单中。
有什么方法可以优化我的模型/表单/ View /模板,以便数据库不会像这样受到不必要的打击吗?
-
免责声明:我对 django 和 python 比较陌生,不禁想到一定有办法以某种方式内置解决这个问题。
最佳答案
field_queryset = Test.objects.all()
for form in formset:
form.fields['test_field'].queryset = field_queryset
像这样。
关于python - Django 内联表单集和选择字段生成过多的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583096/