首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KeyError at /registration/ value 'password1‘

KeyError at /registration/ value 'password1‘
EN

Stack Overflow用户
提问于 2016-01-23 10:37:51
回答 3查看 1.1K关注 0票数 0

我为User创建了一个带有附加字段的新模型。

models.py:

代码语言:javascript
运行
复制
class UserProfile(models.Model):

        user = models.OneToOneField(User)
        email = models.CharField(max_length=50)
        birthday = models.DateField(u'Birthday', blank=True, null=True)
        avatar = models.ImageField(Avatar', upload_to='profile/avatar', blank=True)

        def __unicode__(self):
                return self.user

然后我为用户创建注册表格:

代码语言:javascript
运行
复制
class RegistrationForm(ModelForm):
        username = forms.CharField(label=(u'Enter Your Username'))
        email = forms.EmailField(label=(u'Enter Your E-mail'))
        password = forms.CharField(label=(u'Enter Password'), widget=forms.PasswordInput(render_value=False))
        password1 = forms.CharField(label=(u'Verify Your Password'), widget=forms.PasswordInput(render_value=False))

        class Meta:
                model = UserProfile
                exclude = ('user',)

        def clean_email(self):
                email = self.cleaned_data['email']
                try:
                        User.objects.get(email=email)
                except User.DoesNotExist:
                        return email
                raise forms.ValidationError("User with same e-mail is already exist, please type another email")

        def clean_password(self):
                password = self.cleaned_data['password']
                password1 = self.cleaned_data['password1']

                if not password1:
                        raise forms.ValidationError("You have ti verify your password")
                if password != password1:
                        raise forms.ValidationError("Your passwords doesn't match")
                return password1

这是我对注册页面的看法:

代码语言:javascript
运行
复制
def UserProfileRegistration(request):
        if request.user.is_authenticated():
                return HttpResponseRedirect('/info/')
        if request.method == 'POST':
                form = RegistrationForm(request.POST)
                if form.is_valid():
                        user = User.objects.create_user(username=form.cleaned_data['username'], email=form.cleaned_data['email'], password=form.cleaned_data['password'])
                        user.save()
                        user_profile = UserProfile(user=user)
                        user_profile.save()
                        return HttpResponseRedirect('/info/')
                else:
                        return render(request, 'profiles/registration.html', {'form':form})
        else:
                form = RegistrationForm()
                context = {'form':form}
                return render (request, 'profiles/registration.html', context)

我是否填写正确或错误的密码并不重要,但我有相同的错误KeyError at /registration/Exception Value: 'password1'。谢谢你的回答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-23 11:10:13

在调用password1时,不能保证已经将clean_password()添加到clean_password()中。对于任何需要存在多个字段的验证,您应该在一般的clean()方法中这样做。

票数 1
EN

Stack Overflow用户

发布于 2016-01-23 11:08:16

对于模型表单,如果指定了像password1这样的非模型字段,就必须在forms类中提到field属性。

模型表单将只包括现有的模型字段。将此添加到模型表单元类中:

代码语言:javascript
运行
复制
class Meta:
    model = UserProfile
    fields = ('username', 'email', 'password', 'password1')
票数 1
EN

Stack Overflow用户

发布于 2016-01-23 12:49:18

Django用户已经没有需要添加的电子邮件了(参见https://docs.djangoproject.com/en/1.9/topics/auth/default/#user-objects)

代码语言:javascript
运行
复制
class UserProfile(models.Model):

        user = models.OneToOneField(User)
        birthday = models.DateField(u'Birthday', blank=True, null=True)
        avatar = models.ImageField(Avatar', upload_to='profile/avatar', blank=True)

        def __unicode__(self):
                return self.user

此外,您还需要在表单中为password1添加clean()作为密码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34962398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档