我制作了一个自定义注册表单,它继承自 UserCreationForm。但是,当您尝试提交时,其中一个字段为空,我收到一个 KeyError on required。 这似乎发生在 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
请您参考如下方法:
您正在用您自己的字典替换所有“用户名”字段 error_messages 字典。相反,您应该像这样使用您的自定义消息更新 error_messages 字典:
self.fields['username'].error_messages.update({
'invalid': 'Invalid username'
})
