多余的字段不在Django Modelform的清除数据中

时间:2019-03-25 21:40:20

标签: django django-models django-forms

我有一个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.')

1 个答案:

答案 0 :(得分:0)

我测试此方法的方式,startDate默认为今年1月1日。这意味着clean_startDate(self)将引发ValidationError,并且不会返回数据(startDate)。因为所有clean_fieldname()方法都在clean()之前调用,所以startDate在clean()函数的cleaned_data中将没有“ cleaned value”。