如何确保在提交表单时只调用我的自定义clean_field?

时间:2014-03-28 09:11:30

标签: python django forms django-forms

我有一个像这样的django形式:

class PatientForm(forms.Form):
    patient_id = forms.IntegerField()
    patient_national_code = forms.CharField()

我有一个自定义的clean_方法:

def clean_patient_national_code(self):
    patient_national_code = self.cleaned_data['patient_national_code']
    if not patient_national_code:
        raise forms.ValidationError("My Error!")
    return patient_national_code

但是当我尝试提交一个表格,其national_code字段为空(并且应该返回“我的错误!”)时,它会返回"This field is required."错误。我认为这是django的默认验证器返回的错误,我该怎么做才能获得"My Error!"而不是django的默认错误?

1 个答案:

答案 0 :(得分:2)

在字段定义中添加required=False,在这种情况下,django将不执行检查并将调用您的clean方法。

但是,请注意,当此字段不在表单数据中时,以self.cleaned_data['patient_national_code']方式访问该字段可能会导致KeyError