【问题标题】:Create Django formset without multiple queries创建没有多个查询的 Django 表单集
【发布时间】:2010-05-07 08:43:19
【问题描述】:

我需要在一个页面上显示模型的多个表单(最多 10 个)。这是我用来完成此操作的代码。

TheFormSet = formset_factory(SomeForm, extra=10)
...
formset = TheFormSet(prefix='party')

return render_to_response('template.html', {
        'formset' : formset,
})

问题是,在我看来,Django 为表单集中的每个表单查询数据库,即使其中显示的数据是相同的。

这是 Formsets 的工作方式还是我做错了什么?有没有办法在 django 中解决它,还是我必须使用 JavaScript 来解决?

【问题讨论】:

标签: python django django-forms


【解决方案1】:

如果您使用modelformset_factory 而不是formset_factory 会发生什么?这有帮助吗?

【讨论】:

  • 它没有,Django 仍然查询表单集中的每个表单。
【解决方案2】:

如果查询都相同,可能值得查看johnny-cache,看看这是否会提高性能。

【讨论】:

    【解决方案3】:

    你确定 django 查询数据库吗?尝试使用Django Debug Toolbar 来查看 django 实际执行的查询。

    【讨论】:

    • 感谢您的建议。我安装了工具栏,它确认了大量的查询。该模型有很多外键字段,所以要显示在表单上总共执行了 8 个查询,这已经很多了,所以当我想显示 10 个时,总共进行了 80 个查询!
    • 您确定在创建表单集时执行了对数据库的查询吗?或者当您使用数据库中的数据填充表单集时可能会进行查询?无论如何,尝试在您的查询集上使用 [select_related][1] 以减少实际查询的数量 [1]:docs.djangoproject.com/en/dev/ref/models/querysets/#id4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2021-09-28
    • 2012-11-22
    • 1970-01-01
    • 2017-11-18
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多