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文档链接中写了什么呢?