django用户创建表单需要keyerror

时间:2015-04-22 19:48:39

标签: python django forms registration

我制作了一个自定义注册表单,该表单继承自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

2 个答案:

答案 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'
}

因此,当您将用户名留空时,无法找到“必需”键。