2012-07-05 61 views
2

Django 1.4 documentation,它表示clean_<fieldname>方法先運行,然後形成clean方法執行。Django form.clean(),cleaned_data KeyError

我有以下代碼示例。該表單與FormPreview一起使用。當pmid字段在表單中爲空時,它應該拋出ValidationError異常,但它不會發生。

class MyForm(forms.Form): 
    pmid = forms.CharField() 
    .. other fields .. 

    def clean(self): 
     cd = super(MyForm, self).clean() 
     cd['pmid'] # returns KeyError and it's not in cd 
     return cd 

我不重寫任何clean_<field>方法。

回答

1

首先,如果您要做的只是確保字段不是空白,那麼只需將required=True添加到它即可。例如:

class MyForm(forms.Form): 
    pmid = forms.CharField(required=True) 
    ... 

而你完成了。

但是,即使你不能這樣做的,你仍然不會驗證它在clean,但在clean_<fieldname>作爲文檔描述。

def clean_pmid(self): 
    pmid = self.cleaned_data.get('pmid') 
    if not pmid: 
     raise forms.ValidationError('pmid cannot be blank') 
    return pmid 
+0

所需的默認值爲True。另外,就我所知,即使'clean_ '沒有被覆蓋,它仍然會檢查該字段是否爲空。 – sefakilic 2012-07-05 19:49:11

+0

當你說「空」時,你是否真的表示「甚至不存在於表單中」? – 2012-07-05 19:51:01

+0

不,它存在於表單中,但沒有填充。我的問題可能與FormPreview有關。 – sefakilic 2012-07-05 19:55:30