Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单-已清除的\u数据键错误_Python_Django_Forms - Fatal编程技术网

Python Django表单-已清除的\u数据键错误

Python Django表单-已清除的\u数据键错误,python,django,forms,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

我有一个如下所示的表单:

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:
    # ...
有时,我的用户会在
clean
中的
ERR
行中产生
keyror

我不明白这是怎么可能的,因为清理后的数据应该包含表单的所有字段(作为dict键)

此外,当我测试不发送
email1
email2
(或空白/空值)时,我也无法再现错误


我在这里遗漏了什么?

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

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

email1 = cleaned_data.get('email1')

当然,您也可以将该字段设为必填字段。

当我重新阅读文档时,我终于明白,这意味着
已清理的\u数据
应该包含
form.is\u valid()
之后的所有键(我还没有查看代码,它究竟何时填充了所有键)。然而,我想知道如何重现错误这是一个打字错误吗?cleaned_data=super(PUWForm_fwd,self)。clean()类的名称是AForm。@JonS。对,我遇到了这个问题,因为我错误地期望在任何单个
clean\u field()
调用失败时不会调用
clean()
。在我的例子中,
raisevalidationerror
意味着该字段没有出现在
cleaned_data
clean()
中,但我不知道验证失败了,因为它通常在表单中显示为错误。但是我在问题中提到的django文档链接中写了什么呢?