以下是我的表格代码:
class ConfirmEmailForm(forms.Form):
email = forms.EmailField()
subscribe = forms.IntegerField()
code = forms.CharField(max_length=80)
def clean_subscribe(self):
value = bool(self.cleaned_data['subscribe'])
self.cleaned_data['subscribe'] = value
return value
def clean(self):
cleaned_data = super(ConfirmEmailForm, self).clean()
email = cleaned_data['email']
code = cleaned_data['code']
user = User.objects.filter(username=email).first()
if not user:
raise forms.ValidationError('Email not found')
self.cleaned_data['user'] = user
if user.emailverification.is_key_expired():
raise forms.ValidationError('Link expired, please regenerate')
if not user.emailverification.key == code:
raise forms.ValidationError('Invalid Link')
return cleaned_data
我用这张表格申请GET。现在,当我发送没有email
字段的请求时,我原以为错误将在cleaned_data
处出现,但是它不会引发任何错误,而是在下一行得到KeyError
。在
显然,它将引发一个KeyError
,因为它不存在。但是我的问题是,为什么这个错误没有出现在super(ConfirmEmailForm, self).clean()
本身。在
以下是完整的回溯:
^{pr2}$为什么会这样?我怎么解决这个问题?访问clean
中已验证和清理的数据的正确方法是什么?在
如果clean方法得到一个错误,它将把它添加到错误列表中,它不会引发它。在
您可以找到代码here。在
您可以使用
cleaned_data.get('email')
来解决它,如果找不到值,它将返回None
,然后您可以对其进行检查。在我认为这是因为当你使用clean方法时,这个方法引发的任何ValidationError都不会与某个特定的字段相关联
尝试创建一个除此之外的自定义。在
在执行
cleaned_data['email']
之前,请检查是否存在任何错误。在希望这对你有用。在
相关问题 更多 >
编程相关推荐