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!")

models.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 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 であることに注意してください。

于 2013-04-01T02:47:55.300 に答える