我创建了一个用户注册表单,由于某种原因,first_name和last_name字段存储在(u'',)中。我该如何防止这种情况?
views.py(省略了无关的东西):
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = User.objects.create_user(
username=form.cleaned_data['username'],
email=form.cleaned_data['email'],
password=form.cleaned_data['password']
)
user.first_name=form.cleaned_data['first_name'],
user.last_name=form.cleaned_data['last_name'],
user.save()
userprofile, created = UserProfile.objects.get_or_create(user = user)
return HttpResponse("you have been successfully registered!")
models.py:
class UserProfile(models.Model):
user = models.OneToOneField(User)
例如,我注册名为Joe Bruin的用户。名称存储为(u'Joe',)(u'Bruin',)。我认为form.cleaned_data出了问题,但我不确定如何。
答案 0 :(得分:3)
你有逗号逗号:
user.first_name=form.cleaned_data['first_name'],
user.last_name=form.cleaned_data['last_name'],
这使他们成为元组。你不希望这样。删除尾随逗号。
答案 1 :(得分:1)
first_name
和last_name
未存储在u''
中。 u''
只表示返回的字符串采用unicode格式。 django中的默认编码是unicode。看一下数据库中实际存储的内容。
来自Django Docs General String Handling:
# Python 2 legacy:
my_string = "This is a bytestring"
my_unicode = u"This is an Unicode string"
# Python 3 or Python 2 with unicode literals
from __future__ import unicode_literals
my_string = b"This is a bytestring"
my_unicode = "This is an Unicode string"
注意Python 3中的默认值是unicode。