我有一个用户注册表单,其中包含“密码”和“确认密码”字段。当我将“min_length”添加到我的密码字段,然后通过我的自定义clean_confirm_password方法运行提交的数据时,它会出现“密钥错误/密码”错误。
当密码字段少于5个字符时,无论confirm_password字段是否匹配,都会发生这种情况。
我尝试将“min_length”添加到“confirm_password”,但仍会出现相同的错误。
当我完全删除“min_length”时,一切正常。
任何帮助表示赞赏!
我的forms.py文件:
class NewUser(forms.Form):
email = forms.EmailField(max_length=75)
first_name = forms.CharField(max_length=45)
last_name = forms.CharField(max_length=45)
password = forms.CharField(min_length=5, max_length=30, widget=forms.PasswordInput(render_value=False))
confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput(render_value=False))
def clean_confirm_password(self):
confirm_password = self.cleaned_data['confirm_password']
original_password = self.cleaned_data['password']
if original_password != confirm_password:
raise forms.ValidationError("Password doesn't match")
return confirm_password
答案 0 :(得分:2)
当您提交少于5个字符的密码时,min_length
验证失败,因此password
不在您的表单的cleaned_data
字典中。当您尝试访问缺少的密钥时,会得到KeyError
。
相反,你应该尝试:
original_password = self.cleaned_data.get('password', '')
如果密码太短,将返回''
。
另外,clean_myfieldname
方法应该只依赖于一个字段。如果要清理和验证彼此依赖的字段,请使用clean
方法(请参阅django docs)。
答案 1 :(得分:0)
当您访问self.cleaned_data
时,表单会验证其所有字段,这会导致密码字段根据其min_length
参数进行验证。