2014-03-28 40 views
0

我有一個Django的形式是這樣的:如何確保在提交表單時僅調用我自定義的clean_field?

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的默認錯誤?

回答

2

在字段定義中添加required=False,在這種情況下,django將不會執行檢查並調用您的clean方法。

但是,請注意比當此字段不在表單數據中時,以self.cleaned_data['patient_national_code']的身份訪問它可能導致KeyError

+0

我可以擁有'required = True'並覆蓋django的驗證器嗎? – Navid777

+1

@Navid777,是的,你可以做到這一點。在這種情況下寫一個驗證器,請參閱https://docs.djangoproject.com/en/dev/ref/validators/。不過,django仍然會將其驗證器稱爲'required = True'。 – Rohan

相關問題