根据POST数据向Django表单集添加新表单
我正在尝试用POST请求中的数据来填充一个Django的表单集(formset)。我能正确显示这个表单集,并且大部分情况下可以重新实例化它,但我遇到了一个问题:表单集的最后出现了两行空白,这样不好。下面是我们在views.py中使用的函数:
forms.py
class DepositForm(forms.Form):
InsID = forms.IntegerField()
DepositTypeID = forms.IntegerField()
DepositAmount = forms.IntegerField()
Account = forms.IntegerField()
DepositFormSet = formset_factory(DepositForm, extra=1)
views.py
def _DepositEditor(request, c):
if request.POST.has_key('form-0-InsID'):
formset = DepositFormSet(request.POST)
if formset.is_valid():
formset = DepositFormSet(initial=formset.cleaned_data)
else:
formset = DepositFormSet()
c['formset'] = formset
return render_to_response('deposits/dep.html', c)
dep.html
<form action="" method="post">
{{formset.management_form}}
{% for form in formset.forms %}
{{form.errors }}
{% for field in form %}
{{field.label}}: {{field}}
{% endfor %}
<br />
{% endfor %}
<input type="submit" name="add" value="Add Deposit"></input>
</form>
这应该是所有相关的代码。无论如何,模板显示了整个表单集,应该包括一行空白(或者在出现错误的情况下,最后一行没有空白行,而是错误信息)。问题出现在你点击“添加”时,如果最后一行是空的。在代码中,这仍然通过了formset.is_valid()的验证,所以它就创建了一个多出一个字段的新表单集。如果你在这里点击添加,它会返回错误,但仍然允许你填写除了最后一行以外的所有行,并形成一个有效的表单集。有没有办法告诉我的表单集,空白的表单应该不通过验证?或者有没有更好的方法来解决这个问题?这个页面最终计划集成一些jquery的东西,所以虽然这不是理想的情况,但如果有好的方法可以用jquery工具来解决这个问题,那也许就足够了。非常感谢!
2 个回答
1
我自己没有这样做过,但如果你想让一个空白的输入变得无效,也许可以考虑把这个逻辑放在清理方法里:
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#custom-formset-validation
2
在你的 views.py 文件里:
- formset = DepositFormSet(initial=formset.cleaned_data)
+ data = formset.cleaned_data
+ if data[-1]=={}:
+ data=data[:-1]
+ formset = DepositFormSet(initial=data)
这看起来更像是一个功能,而不是一个错误哦;)