Django self.cleaned_data键盘错误


问题内容

我正在写一个Django网站,并且正在写自己的表单验证:

class CreateJobOpportunityForm(forms.Form):
    subject = forms.CharField(max_length=30)
    start_date = forms.DateField(widget=SelectDateWidget)
    end_date = forms.DateField(widget=SelectDateWidget)

    def clean_start_date(self):
        start_date = self.cleaned_data['start_date']
        end_date = self.cleaned_data['end_date']
        if start_date > end_date :
            raise forms.ValidationError("Start date should be before end date.")
        return start_date

但是当start_date小于end_date时,它说:

KeyError at /create_job_opportunity
'end_date'

为什么不能识别'end_date'钥匙?


问题答案:

由于一个字段取决于另一字段,因此最好clean使用表格的方法而不是单个clean_field方法进行清洗。

def clean(self):
    cleaned_data = super(CreateJobOpportunityForm, self).clean()
    end_date = cleaned_data['end_date']
    start_date = cleaned_data['start_date']
    # do your cleaning here
    return cleaned_data

否则,您必须确保end_date在清理场地之前start_date