python - Django 内联表单集和选择字段生成过多的数据库查询

标签 python django inline-formset

我有一个包含许多外键字段的模型,例如具有“类型”、“级别”、“颜色”、“强度”字段的模型产品(只是一个通用示例)。

然后我有一个页面可以使用 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/

相关文章:

python - Miniconda 与 Python 3.6 使用哪个安装程序?

python - 在两个 Python 服务器之间发送消息

Django 的内联表单

django - 如何限制 django admin 内联表单集

c++ - 如何在 Python + SWIG 中接收引用和指针参数?

python - 如何在wxpython中制作 Canvas (矩形)?

python - pylint-pytest 如何抛出 F6401 Can-enumerate-pytest-fixtures

python - Heroku/python 未能检测到 set buildpack

python - 如何在 Django 模型上存储字典?

python - 如何使用 django formset 动态删除对象