在Django表单集中使用extra和max_num

在Django表单集中使用extra和max_num,django,Django,我有一个没有关联模型的表单集,我希望在所有现有表单都有效后能够向表单集添加表单,因此阅读文档时,我发现:如果max_num的值大于现有对象的数量,只要表单总数不超过max_num,表单集中最多会添加额外的空白表单(https://docs.djangoproject.com/en/dev/topics/forms/formsets/#limiting-表格的最大数量): 所以我这样做了: FormSet = formset_factory(SomeForm, extra=2, max_num=1

我有一个没有关联模型的表单集,我希望在所有现有表单都有效后能够向表单集添加表单,因此阅读文档时,我发现:如果max_num的值大于现有对象的数量,只要表单总数不超过max_num,表单集中最多会添加额外的空白表单(https://docs.djangoproject.com/en/dev/topics/forms/formsets/#limiting-表格的最大数量):

所以我这样做了:

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>

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


这是怎么回事?我误解了文档吗?我的代码错了吗?

我找到了我问题的部分答案:我让它工作了,但我发现解决方案不太像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数据中已清理的_数据重新实例化了表单集,并添加了一些内容,以防止在仍有空表单的情况下按“下一步”时弹出额外的表单


这是可行的,但我真的不认为这应该是实现这一点的方法。

我找到了我问题的部分答案:我让它起作用了,但我发现解决方案不太像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数据中已清理的_数据重新实例化了表单集,并添加了一些内容,以防止在仍有空表单的情况下按“下一步”时弹出额外的表单

这是可行的,但我真的不认为这应该是解决问题的方法