【发布时间】:2015-01-03 08:56:35
【问题描述】:
我想我可能遗漏了一些关于 Django 表单验证的信息,但我认为只有在表单中没有错误时,在表单上运行 is_valid 才会返回 true。
我正在尝试使表单在“endTime”或“duration”未设置时返回 false。
class NewShiftForm(forms.Form):
recursionChoices = (('1','Once'),('2','Twice'),('4','Four times'),('10','Ten times'))
endTime = forms.CharField(max_length=16, required=False)
duration = forms.CharField(max_length=16, required=False)
employee = UserModelChoiceField(queryset=User.objects.all(), required=True)
recursion = forms.ChoiceField(choices=recursionChoices, widget=forms.Select())
def clean(self):
clean_duration = self.cleaned_data.get("duration")
clean_endTime = self.cleaned_data.get("endTime")
if not clean_duration and not clean_endTime:
raise forms.ValidationError("You need either duration or end time")
return self.cleaned_data
我认为我的 clean 函数工作正常,因为我在模板中呈现表单时看到了表单错误(“您需要持续时间或结束时间”)。但是,在我看来,我将其设置为检查表单是否通过 is_valid
def newShift(request, year, month, day, hour, minute, positionID):
form = NewShiftForm()
validity = "This form did not pass validation"
if request.POST:
form = NewShiftForm(request.POST)
if form.is_valid:
validity = "This form passed validation"
startTime = datetime.datetime(int(year), int(month), int(day), int(hour), int(minute), 0)
year = int(year)
position_name = Position.objects.filter(id=positionID)[0]
return render(request, 'managers/newShift.html',{
"form": form,
"start": startTime,
"position": position_name,
'validity': validity,
})
模板在 POST 之前将有效性显示为“此表单未通过验证”。提交,并在 POST 提交后“此表单通过验证”。
如果表单有表单错误,如何使表单无法通过验证?
非常感谢!
【问题讨论】:
标签: django forms validation