2012-07-05 165 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