1

我有一个没有与之关联的模型的表单集,一旦所有现有表单都有效,我希望能够向表单集添加一个表单,因此阅读文档时,我发现:“如果 max_num 的值大于数字现有对象,最多额外的额外空白表单将添加到表单集中,只要表单总数不超过 max_num。”(https://docs.djangoproject.com/en/dev/topics/forms/表单集/#limiting-the-maximum-number-of-forms):

所以我这样做了:

FormSet = formset_factory(SomeForm, extra=2, max_num=10)
    if request.method == 'POST':
        formset = FormSet(data=request.POST)
    else:
        formset = FormSet()

和这个:

<form action="" method="POST">
{{ formset }}
<input type="submit" value="Next" />
</form>

期望看到 2 个空表格,如果我填写一个(或 2 个)表格并按“下一步”,我会在其中获得额外的表格。但是,即使我有 1 或 2 个有效表单,模板中也只会显示 2 个表单。

这应该如何工作?我是否误解了文档?我的代码错了吗?

4

1 回答 1

1

我找到了我的问题的部分答案:我让它工作了,但我发现解决方案不是很像 Django。我希望这些事情会自动发生,没有下面的麻烦。

无论如何,我因此改变了看法:

if request.method == 'POST':
    formset = FormSet(data=request.POST)
    if formset.is_valid():
        clean_data = formset.cleaned_data
        if not any(not(len(f)) for f in clean_data):
            formset = FormSet(initial=clean_data)
else:
    formset = FormSet()

因此,我使用 POST 数据中的 clean_data 重新实例化了表单集,并添加了一些内容以防止在仍有空表单时按“下一步”弹出额外的表单。

它有效,但我真的不认为这应该是这样做的方法。

于 2012-10-12T02:35:45.123 回答