Django self.cleaned_data Keyerror

Nav*_*777 3 python django django-forms

我正在写一个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
Run Code Online (Sandbox Code Playgroud)

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

KeyError at /create_job_opportunity
'end_date'
Run Code Online (Sandbox Code Playgroud)

为什么不认识'end_date'钥匙?

els*_*sar 9

由于一个字段依赖于另一个字段,因此最好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
Run Code Online (Sandbox Code Playgroud)

否则,你必须确保你的end_date领域之前得到清理start_date.