1

我正在使用 Django 的内置 form.ModelForm 和 formset_factory 为用户输入提供一组表单。表单上的一些字段是选择框,这些框中的数据由几个字段组成,因此我希望每个选择都有几个 DB 命中。但是,当我为每个额外的表单添加额外的表单(例如,通过使用“额外”参数)时,它会再次访问数据库。例如,如果有 4 个 DB 命中进行 1 个选择,并且有 10 个选择,我们期望 40 个查询。但是,如果我添加 5 个“额外”内联,突然之间就有 4 * 10 * 5 用于 200 个查询。formset_factory 没有意识到所有内联的选择框都相同吗?为什么有这么多的数据库命中?有一个更好的方法吗?在我看来,选择应该生成一次,并用于每个选择框(即,

4

1 回答 1

1

我绝对同意表单集应该足够聪明,不会多次查询。我遇到过很多次。我最终做了这样的事情:

class TestFormset(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super(TestFormset,self).__init__(*args, **kwargs)

        awesome_models = AwesomeModel.objects.all()

        for form in self.forms:
            form.fields['awesome_model'].choices = [('', '--------')] + [(x.pk, x.name) for x in awesome_models]

这基本上只运行一个查询,然后为表单集中的每个表单手动设置特定字段的选项。

于 2013-09-18T23:31:23.230 回答