【发布时间】:2012-04-15 02:00:47
【问题描述】:
我有一个不作为 HTML 页面的一部分呈现但验证输入的表单:
class milestone_form(forms.Form):
name = forms.CharField(required=True)
completion = forms.IntegerField(initial=0, required=False)
due_date = forms.DateField(required=True,input_formats={'%d.%m.%Y'})
phase = forms.IntegerField(required=True)
这个完成位会导致很多问题:
form = milestone_form(request.POST)
form.is_valid()#will return False on empty completion
我尝试覆盖表单的 clean() 以在它为空时使完成 = 0:
def clean(self):
cleaned_data = self.cleaned_data
if cleaned_data.get('completion') is None:
cleaned_data['completion'] = 0
return cleaned_data
但是,它没有帮助。我还缺少什么吗?
【问题讨论】:
-
您应该在表单中包含
input以完成填写,但使用HiddenInput小部件使其不显示。 -
我运行了您提供的代码,它对我来说运行良好。当完成为 None 或 POST 数组中不存在时,表单被报告为有效。尝试在表单的 clean 方法中更改完成的值也没有用,因为它是验证和清理链中要调用的最后一个函数。看看:docs.djangoproject.com/en/1.3/ref/forms/validation/…
-
这是一个可用于输入的真实输入 - 我只希望当该字段为空时它为“0”。
-
@abhaga,你很幸运 :) 它对我来说运行不佳:
<ul class="errorlist"><li>completion<ul class="errorlist"><li>Enter a whole number.</li></ul></li></ul>尽管表单调试显示completion = {int} 0
标签: django django-forms django-validation