使扩展的Django UserCreationForm能够将额外的信息保存到数据库

时间:2016-08-14 00:13:16

标签: python django django-forms django-1.10

我一直在尝试扩展默认UserCreationForm以包含电子邮件,名字和姓氏。这似乎是关于SO 的一个非常常见的主题但是我得到的逻辑错误我仍然没有找到解决方案。

这是我的代码:

forms.py

class RegistrationForm(UserCreationForm):
    first_name = forms.CharField(required=True, label="First name:", max_length=100)
    last_name = forms.CharField(required=True, label="Last name:", max_length=100)
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2')

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

views.py

def register_user(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/reg_interests/')
    args = {}
    args['form'] = RegistrationForm()
    return render(request, 'login/registration.html', args)

视图和表单在技术上工作,我没有看到错误消息,但是在user.save()上,名字和姓氏都没有保存到数据库中(但电子邮件是)。

我知道emailfirst_namelast_name中的每一个都是默认Django用户对象中存在的字段,因此不存在的字段不存在问题。

扩展后的email如何保存到数据库,但first_namelast_name不会?

注意:我正在使用新发布的Django 1.10,所以我不知道是否与它有任何关系。

0 个答案:

没有答案