Django表单 - cleaning_data KeyError

时间:2014-11-27 17:57:37

标签: python django forms

我的表单如下所示:

class AForm(forms.ModelForm):
    email1 = forms.EmailField(required=False, initial='')
    email2 = forms.EmailField(required=False)

    class Meta:
        model = AModel
        fields = ()

    def clean_email1(self):
        return self.cleaned_data['email1'].lower()

    def clean_email2(self):
        return self.cleaned_data['email2'].lower()

    def clean(self):
        cleaned_data = super(AForm, self).clean()
        email1 = cleaned_data['email1']   # ERR
        email2 = cleaned_data['email2']
        # ...

以下列方式在视图post方法中使用它:

form = AForm(request.POST, instance=self.object)
if forms.is_valid():
    # ...
else:
    # ...

我的用户有时会在标有KeyError的行的clean内生成ERR

我不明白这是怎么可能的,因为as the documentation reads,cleaning_data应该包含(作为dict键)表单的所有字段。

另外,当我测试email1email2(或空白/空值)没有发送任何内容时,我无法重现错误。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

您已明确将email1标记为必需= False。这意味着完全可以在没有该字段值的情况下进行清理,在这种情况下,它不会包含在cleaning_data dict中。

为了防范这种情况,您可以使用普通的dict get方法:

email1 = cleaned_data.get('email1')

或者,当然,你可以填写所需的字段。