我有一个包含两个日期字段的表单,两者都是必需的:
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()
方法使 Djangorequired=True
在字段级别忽略,因为当我提交表单而不输入任何内容时,clean()
摆动开始但KeyError
由于cleaned_data
字典不包含该键而崩溃(这是可以理解的,因为我没有输入任何内容) )。
我希望在此required=True
之前执行字段级别检查,clean()
然后标记两个字段都需要某种类型的条目,并在不运行clean()
.
我错过了什么吗?