我有一个ModelForm
,其中包含一些额外的字段。我已覆盖此表单的clean()
函数,但无法访问cleaned_data
中的这些额外字段。验证下面的表单时,在倒数第二行data.get('startDate')
返回None
,因为它在清除的数据中找不到startDate
。
## Model ##
class Reservation(models.Model):
groupName = models.CharField(max_length=64)
email = models.EmailField()
comments = models.TextField(null=True, blank=True)
## Form ###
class ReservationForm(forms.ModelForm):
startDate = forms.DateField(widget=forms.SelectDateWidget)
endDate = forms.DateField(widget=forms.SelectDateWidget)
class Meta:
model = Reservation
fields = [
'groupName',
'email',
'startDate',
'endDate',
'comments'
]
def clean_startDate(self):
data = self.cleaned_data['startDate']
if data < datetime.date.today():
raise forms.ValidationError('Pick a date in the future')
return data
def clean(self):
data = super().clean()
if data.get('startDate') > data.get('endDate')
raise forms.ValidationError('End date must be after start date.')
答案 0 :(得分:0)
我测试此方法的方式,startDate默认为今年1月1日。这意味着clean_startDate(self)将引发ValidationError,并且不会返回数据(startDate)。因为所有clean_fieldname()方法都在clean()之前调用,所以startDate在clean()函数的cleaned_data中将没有“ cleaned value”。