我有一个如下形式的表格:

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中,cleaned_data应该包含(作为dict键)表单的所有字段。

同样,当我测试不发送email1email2(或空白/空值)的内容时,我无法重现该错误。

我在这里想念什么?

最佳答案

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

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

email1 = cleaned_data.get('email1')


或者,当然,您可以将其设为必填字段。

关于python - Django表单-cleaned_data KeyError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27176589/

10-13 09:43
查看更多