【问题标题】:Extending UserCreationForm to include email, first name, and last name扩展 UserCreationForm 以包括电子邮件、名字和姓氏
【发布时间】:2011-12-16 04:22:10
【问题描述】:

我已经被这个问题困扰了一段时间,似乎无法弄清楚发生了什么。我刚开始学习 Django,我设置了登录,现在想实现一个注册页面。

我一开始使用的是 UserCreationForm 表单,效果很好,但我想为电子邮件、名字和姓氏添加字段。我想我可以只继承 UserCreationForm 并添加字段,但这似乎不起作用。我也尝试过覆盖保存方法,但它仍然不起作用。

我的自定义表单如下所示:

class RegistrationForm(UserCreationForm):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.EmailField(max_length=75)

    class Meta:
        model = User
        fields = ("first_name", "last_name", "email",)

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data["first_name"]
        user.last_name = self.cleaned_data["last_name"]
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

处理这个问题的视图如下:

def Register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            new_user = form.save();
            new_user = authenticate(username=request.POST['username'], password=request.POST['password1'])
            login(request, new_user)
            return HttpResponseRedirect('/members/home')
    else:
        form = RegistrationForm()

    return render_to_response('register.html', {'form' : form}, context_instance=RequestContext(request))

表单可以很好地加载新字段和所有内容,但是当我提交时出现错误:

AttributeError at /register/

'AnonymousUser' object has no attribute 'backend'

哦,我也在使用 Django 1.3。

知道我做错了什么吗?

【问题讨论】:

  • 我应该提到的另一件事是,似乎记录正在输入数据库中很好,除了用户名字段为空... first_name、last_name、email 和 password 都有值。

标签: django django-forms django-authentication


【解决方案1】:

我的猜测是您的元类fields 不包括username

您从UserCreationForm 继承表单字段,但它没有保存到User 模型,因此authenticate 失败,并在login() 上崩溃

文档建议你在使用login()之前检查authenticate()是否成功

【讨论】:

  • 成功了!谢谢!我不是 100% 确定我完全理解。为什么我必须指定用户名字段而不指定密码字段?
  • 因为密码是通过user.set_password设置的,而不是一些ModelForm特定的逻辑。
  • 哦,对,有道理。再次感谢,我真的很感激。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2012-04-21
  • 2021-12-06
  • 2020-04-17
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多