Skip to main content
 首页 » 编程设计

python之django 用户创建表单需要 keyerror

2024年08月26日32itcoder

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