2
我有两个日期字段形式,都需要:的Django忽略所需表格字段=真
arrival_date = forms.DateField(
required = True,
widget = DateInput(attrs={
"class": "input-small"
}),
)
departure_date = forms.DateField(
required = True,
widget = DateInput(attrs = {
"class": "input-small"
})
)
由于这两个日期涉及更大的范围内的一些复杂的验证,该形式也具有clean()
方法,其执行在日期一些额外的检查:
def clean(self):
cleaned_data = super(NewBookingForm3, self).clean()
arrival_date = cleaned_data["arrival_date"]
departure_date = cleaned_data["departure_date"]
property_object = self.wizard.object.property
try:
validate_booked_dates(arrival_date, departure_date, property_object)
except forms.ValidationError:
del cleaned_data["arrival_date"]
del cleaned_data["departure_date"]
raise
return cleaned_data
现在的问题是,显然clean()
方法使得Django的外地一级忽略required=True
,因为当我提交表单不作任何输入由于cleaned_data
字典不包含该密钥(这是可以理解的,因为我没有输入任何内容),因此开始动作,但与KeyError
崩溃。
我预计要在clean()
之前进行实地检查required=True
,然后这些标志这两个领域都需要某种形式的条目,并报告该错误不回运行clean()
。
我错过了什么吗?
我还是很困惑。我的假设是,当在该特定字段中不输入任何内容时,required = True会触发ValidationError异常。然后这个异常会暂停表单的验证过程的进一步执行并报告一个错误(通过表单)BEFORE Django执行clean()方法... – Roger
但是,这是不正确的“暂停”部分。总是调用'clean',因为它有机会引发自己的验证消息,这可能与其他验证失败没有任何关系:防止出现“口令不匹配”错误会很奇怪只是因为你没有填写完全独立的必填字段。 –
因此,即使字段验证(必需)引发异常,clean()也会被调用?我不想分头发,但是有没有例外,以阻止正常的程序流程,让我们处理异常情况? – Roger