0

我创建了一个用户注册表单,出于某种原因,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!")

模型.py:

class UserProfile(models.Model):
     user = models.OneToOneField(User)   

例如,我注册了一个名为 Joe Bruin 的用户。名称存储为 (u'Joe',) (u'Bruin',)。我认为 form.cleaned_data 出了点问题,但我不确定如何。

4

2 回答 2

3

您有尾随逗号:

user.first_name=form.cleaned_data['first_name'],
user.last_name=form.cleaned_data['last_name'],

这使它们成为元组。你不想要那个。删除结尾的逗号。

于 2013-04-01T02:42:40.410 回答
1

first_name并且last_name不存储在u''. u''just 表示返回的字符串是 unicode 格式。django 中的默认编码是unicode。查看数据库中实际存储的内容。

来自Django Docs 通用字符串处理

# 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。

于 2013-04-01T02:47:55.300 回答