FormSet渲染总是两种形式作为默认Django

时间:2016-02-26 21:08:12

标签: python django django-forms

我的FormSet有以下代码:

Forms.py

class RequiredFormSet(BaseFormSet):
    def __init__(self, *args, **kwargs):
        super(RequiredFormSet, self).__init__(*args, **kwargs)
        for form in self.forms:
            form.empty_permitted = False

CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)

Template.html

{{ city_formset.management_form }}
{% for city_form in city_formset %}
{{ city_form.id }}
<div>
    {{ city_form.city_name }}
</div>

<div>
    {{ city_form.region }}
</div>
{% endfor %}

在formset中创建和删除表单由JavaScript处理,但只有在单击按钮时才会激活它。如果用户编辑JavaScript并删除了验证页面必须具有多少表单的条件,则他可以在表单集中提交没有任何表单的页面。

如果我在构造函数中设置min_num=0,则用户可以使用上面的方案并重新进行验证。如果我将其设置为min_num=1,则他不能在表单集中生成两个表单。

1 个答案:

答案 0 :(得分:1)

当然,只需更改此行:

CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)

到此:

CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5,
                              validate_min=True, validate_max=True,
                              formset=RequiredFormSet, extra=0)

还使你的线条更短,所以你不必滚动这么多。