我制作了一个自定义注册表单,该表单继承自UserCreationForm
。但是,当您尝试提交时,其中一个字段为空,我需要KeyError
。
这似乎发生在django源代码中的某个地方,但是我很确定它是因为我的自定义清理方法而来。
形式:
class RegistrationForm(UserCreationForm):
"""
edit the User Registration form to add an emailfield
"""
class Meta:
model = User
fields = ('username', 'password1', 'password2')
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
#add custom errormessages
self.fields['username'].error_messages = {
'invalid': 'Invalid username'
}
self.fields['password2'].label = "Confirm Password"
#make sure username is lowered and unique
def clean_username(self):
username = self.cleaned_data.get('username')
try:
User.objects.get(username__iexact=username)
raise forms.ValidationError("This username is already in use.")
except User.DoesNotExist:
pass
return username
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
if commit:
user.save()
return user
错误日志http://pastebin.com/8Y6Tp7Rw
注意:我使用的是django 1.8
答案 0 :(得分:3)
您正在使用自己的dict替换所有'username'字段error_messages dict。相反,您应该使用自定义消息更新error_messages dict,如下所示:
self.fields['username'].error_messages.update({
'invalid': 'Invalid username'
})
答案 1 :(得分:0)
您似乎更改了“用户名”字段的原始错误消息(您没有添加,但覆盖了):
#add custom errormessages
self.fields['username'].error_messages = {
'invalid': 'Invalid username'
}
因此,当您将用户名留空时,无法找到“必需”键。