【发布时间】:2014-11-27 17:57:37
【问题描述】:
我有一个如下所示的表单:
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:
# ...
有时我的用户会在标有ERR 的行的clean 中生成KeyError。
我不明白这怎么可能,因为as the documentation reads,cleaned_data 应该包含(作为字典键)表单的所有字段。
当我测试不发送 email1 和 email2(或空白/空值)时,我也无法重现该错误。
我在这里错过了什么?
【问题讨论】:
-
当我重新阅读文档时,我终于明白这意味着
cleaned_data应该包括所有的键form.is_valid()之后(我没有查看代码尚未关于何时准确地填充所有键)。然而,我想知道如何重现错误 -
这是错字吗? clean_data = super(PUWForm_fwd, self).clean() 类名是AForm。
-
@JonS。对了,打错字了
-
我遇到了这个问题,因为我错误地预期
clean()不会在任何个人clean_field()调用失败时被调用。在我的例子中,raise ValidationError表示该字段没有出现在clean()中的cleaned_data中,但我不知道验证失败,因为它通常在表单中显示为错误。