Django form.clean(),cleaning_data KeyError

时间:2012-07-05 18:39:09

标签: django forms

Django 1.4 documentation中,它表示首先运行clean_<fieldname>方法,然后执行表单clean方法。

我有以下代码示例。该表单与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 个答案:

答案 0 :(得分:1)

首先,如果你想要做的只是确保一个字段不是空白,那么只需添加required=True即可。例如:

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

你已经完成了。

但是,即使您不能这样做,仍然也不会在clean中验证它,而是在文档描述的clean_<fieldname>中验证。< / p>

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