Django自定义注册表

时间:2016-02-11 19:26:50

标签: python django

我正在尝试创建一个自定义表单,用户也可以输入他的名字,但是我遇到了一个问题,当注册完成时,名称没有保存,我无法在模板上显示。

这是代码

views.py

def register_user(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/user/')
    else:
        if request.method == 'POST':
            form = MyRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/user/')

        context = {}
        context.update(csrf(request))
        context['form'] = MyRegistrationForm()

        return render(request, 'register.html', context)

forms.py

class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)
    name = forms.CharField(required=True)

    class Meta:
        model = User
        fields = {'name', 'username', 'password1', 'password2', 'email'}

    def save(self, commit=True):
        user = super(MyRegistrationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        user.name = self.cleaned_data['name']

        if commit:
            user.save()

        return user

register.html

<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
  {{ form.name.errors }}
  {{ form.name.label_tag }}
  {{ form.name }}
</div>
[... other form fields ...]
</div>
<input type="submit" value="Register"/>
</form>

因此,当我提交表单时,一切正常,但当我尝试在模板中显示{{ user.name }}时,没有显示任何内容,为什么会这样? (适用于电子邮件领域)

2 个答案:

答案 0 :(得分:5)

默认的User对象doesn't have a name field(因此您实际上只是将name字段的内容保存到对象,而不是数据库中。它有一个first_namelast_name,因此您可以使用这些字段,也可以customize the User model使用单独的name字段

修改

此外,您知道,如果您使用first_namelast_name字段,User模型内置了get_full_name()方法,可能会有用

答案 1 :(得分:-5)

用户没有&#34;名称&#34;领域。尝试:

{{ user.username }}