首页 > 解决方案 > 额外字段不在 Django Modelform 的已清理数据中

问题描述

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

标签: djangodjango-modelsdjango-forms

解决方案


我测试这个的方式,startDate 默认为今年一月一日。这意味着 clean_startDate(self) 会引发 ValidationError 并且不会返回数据 (startDate)。因为所有的 clean_fieldname() 方法都是在 clean() 之前调用的,所以 startDate 在 clean() 函数的 clean_data 中不会有“清理值”。


推荐阅读