【发布时间】:2017-07-12 14:07:03
【问题描述】:
我想修改我的 UserCreationForm 以便当用户请求注册我的网站时,他们会得到一个用户名 last_name+'.'+first_name。
我的 django forms.py:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False)
last_name = forms.CharField(max_length=30, required=False)
email = forms.EmailField(max_length=254)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'password1', 'password2', )
exclude = ['username', ]
所以我已经从实际表单中排除了用户名:
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
<p>
{{ field.label_tag }}<br>
{{ field }}
{% if field.help_text %}
<small style="color: grey">{{ field.help_text }}</small>
{% endif %}
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
</p>
{% endfor %}
<button type="submit">Sign up</button>
</form>
在我看来.py:
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
我曾尝试在此处输入 form.save(),然后尝试获取 clean_data first_name.last_name = username,但它不起作用
if form.is_valid():
form.save()
first_name = form.cleaned_data.get('first_name')
last_name = form.cleaned_data.get('last_name')
raw_password = form.cleaned_data.get('password1')
#username = form.cleaned_data.get('username')
username = firstname+'.'+lastname
user = authenticate(username=username, password=raw_password)
user.is_active = False
user.save()
return render(request, 'registration/signedup.html', {'user': user})
else:
return render(request, 'registration/signup.html', {'form': form, 'invalid': 'Please try again.'})
else:
form = SignUpForm()
return render(request, 'registration/signup.html', {'form': form})
【问题讨论】:
-
您遇到任何错误吗?
-
我的用户名是 Nonetype at: username = form.cleaned_data.get('username')
-
在我看来,您需要执行 form.save() 才能将 form.cleaned_data 取出 - 但您无法保存表单,因为用户名是 None - 所以我需要以某种方式编辑 form_save() 但是我不知道该怎么办
-
现在有什么问题??显然用户名将是无,因为您已从表单中排除该字段
-
我希望不输入用户名,但要在表单中输入名字和姓氏。然后我希望用户名自动分配给last_name.firstname。例如,John Smith 通过此表单请求访问。他在 first_name 框中输入 John,在 last_name 框中输入 Smith,然后是他的密码和电子邮件。然后他的用户名自动变成 smith.john。问题是您似乎需要用户名值来保存表单,这就是您获取 first_name 和 last_name 值的方式
标签: python django forms authentication