Python Django海关登记表
我正在尝试创建一个自定义表单,用户也可以在其中输入自己的姓名,例如,但我面临一个问题,注册完成后,该名称将不会保存,并且无法在模板上显示 这是密码 视图.pyPython Django海关登记表,python,django,Python,Django,我正在尝试创建一个自定义表单,用户也可以在其中输入自己的姓名,例如,但我面临一个问题,注册完成后,该名称将不会保存,并且无法在模板上显示 这是密码 视图.py def register_user(request): if request.user.is_authenticated(): return HttpResponseRedirect('/user/') else: if request.method == 'POST':
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
,并在该模型上添加额外字段(性别等)。如果我想更改用户的功能(即使用电子邮件地址而不是用户名登录),我通常只使用自定义用户模型。如果我想要自定义字段,我会使用一个单独的配置文件
模型感谢您的建议,配置文件模型是我要做的事情的最佳选择