在Django formset中使用extra和max_num

时间:2012-10-12 01:13:02

标签: django

我有一个没有与之关联的模型的formset,并且我希望能够在所有现有表单都有效后向表单集添加表单,因此阅读文档时,我发现:“如果max_num的值更大与现有对象的数量相比,只要表格总数不超过max_num,就会在表格集中添加额外的额外空白表格。“(https://docs.djangoproject.com/en/dev/topics / forms / formsets / #limion-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个表单。

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

1 个答案:

答案 0 :(得分: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数据中的cleaning_data重新实例化了formset,并添加了一些内容,以防止在存在空表单的情况下按“Next”时弹出额外的表单。

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