Python Django海关登记表

Python Django海关登记表,python,django,Python,Django,我正在尝试创建一个自定义表单,用户也可以在其中输入自己的姓名,例如,但我面临一个问题,注册完成后,该名称将不会保存,并且无法在模板上显示 这是密码 视图.py def register_user(request): if request.user.is_authenticated(): return HttpResponseRedirect('/user/') else: if request.method == 'POST':

我正在尝试创建一个自定义表单,用户也可以在其中输入自己的姓名,例如,但我面临一个问题,注册完成后,该名称将不会保存,并且无法在模板上显示

这是密码

视图.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)
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
forms.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)
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>

{%csrf_令牌%}
{{form.name.errors}
{{form.name.label_tag}
{{form.name}
[…其他表单字段…]
因此,当我提交表单时,一切都正常,但当我试图在模板中显示
{{user.name}}
时,什么都没有显示,这是为什么?(它适用于电子邮件字段)

用户没有“名称”字段。尝试:

{{ user.username }}

默认的
User
对象(因此您实际上只是将
name
字段的内容保存到对象,而不是数据库)。它有一个
first\u name
last\u name
,因此您可以使用这些字段,也可以使用一个单独的
name
字段

编辑


另外,正如您所知,如果您使用
first\u name
last\u name
字段,则
User
模型内置了一个
get\u full\u name()
方法,这可能很有用

好吧,“name”字段就是一个例子,我想创建一个radiofield,用户可以在其中选择他的性别并在这些性别之间授予不同的权限,因此我需要创建一个自定义表单。您有两个选项。您可以指定一个自定义用户模型(如上所述),也可以创建一个
配置文件
模型,该模型为您的
用户
模型创建一个
OneToOneField
,并在该模型上添加额外字段(性别等)。如果我想更改用户的功能(即使用电子邮件地址而不是用户名登录),我通常只使用自定义用户模型。如果我想要自定义字段,我会使用一个单独的
配置文件
模型感谢您的建议,配置文件模型是我要做的事情的最佳选择