django – 扩展UserCreationForm以包含电子邮件,名字和姓氏

我现在已经坚持了一段时间,似乎无法弄清楚发生了什么.我刚刚开始学习Django并且我已经设置了登录页面,现在想要实现一个注册页面.

我首先使用了UserCreationForm表单并且工作正常,但我想添加电子邮件,名字和姓氏的字段.我想我可以只是子类UserCreationForm并添加字段,但似乎不起作用.我也尝试重写save方法,但它仍然无法正常工作.

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

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.

知道我做错了什么吗?

最佳答案
我的猜测是你的元类字段不包含用户名.

您正在从UserCreationForm继承表单字段,但它没有保存到用户模型,因此验证失败,并在login()时崩溃

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

转载注明原文:django – 扩展UserCreationForm以包含电子邮件,名字和姓氏 - 代码日志