首页 文章

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

提问于
浏览
7

我有一个带有许多外键字段的模型,例如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 回答

  • 4

    您可以change the queryset used by the formset,然后您可以使用select_related()生成FK连接,而不是在每个forloop迭代中执行查询 .

  • 3
    field_queryset = Test.objects.all()    
    for form in formset:
            form.fields['test_field'].queryset = field_queryset
    

    像这样 .

相关问题