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

dav*_*vur 7 python django inline-formset

我有一个包含许多外键字段的模型,例如带有字段'type','level','color','intensity'的模型Product(只是一个通用示例).

然后,我有一个页面,使用Type表单编辑给定类型的所有产品,产品作为内联formset,并可选择使用内联添加其他产品extra=10.

我觉得非常奇怪的是,每次当我输出模板上的一个外键选择字段时,Django会查询数据库以获取选项(每次).

例如:

{% for form in formset %}
    {{ form.level }}
    {{ form.color }}
    {{ form.intensity }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

有20个产品(和10个空的额外表格),上面的代码select * from ...从级别,颜色和强度共发出30 个查询(使用Django调试工具栏显示),其中3应该就足够了.这些选项不太可能在请求中改变,但即使它们确实如此,我绝对不希望一些新添加的选项仅出现在最后5个表单中.

有没有办法优化我的模型/表单/视图/模板,以便数据库不会被不必要地敲打?

-

免责声明:我对django和python相对较新,并且不禁想到必须有办法以某种方式解决这个问题.

小智 1

field_queryset = Test.objects.all()    
for form in formset:
        form.fields['test_field'].queryset = field_queryset
Run Code Online (Sandbox Code Playgroud)

像这样。

  • 这是行不通的。这些表单似乎在查询集上调用 .all() ,这会创建一个新查询集,该新查询集不与原始查询集和其他表单共享结果。(姜戈1.7.1) (3认同)
  • 这是行不通的。在您可以像这样替换它们之前,将使用默认查询集构建表单,因此它将执行同样多的查询。 (2认同)