我的post方法返回(u''),django save在保存时包含(u'')字符串

时间:2013-01-05 09:29:51

标签: python django post

这就是我从网页上检索帖子数据的方法。可以保存人员模型,但它包含"(u'')"字符串。例如,如果将firstname更改为“Alex”,则会获得原始值u('Alex')并将其保存。

def submit_e(req, person_id=None):

if(req.POST):

    try:
        person_id = req.POST['driver']
        person = Person.objects.get(pk=person_id)


        person.firstname = req.POST['firstname'],
        person.midname   = req.POST['middleinitial'],
        person.lastname  = req.POST['lastname'],

        person.full_clean()
        person.save()
    except Exception as e:
        print e
    return HttpResponseRedirect(reverse('users:user_main'))

2 个答案:

答案 0 :(得分:0)

注意:根据您的问题,以下是我对您所看到的内容的最佳猜测。如果我猜错了,请更新您的帖子并提供更多详细信息 - 在您的代码中添加print语句并将输出添加到您的帖子将是一个良好的开端。

字符串上的u前缀表示Unicode字符串。它实际上不是字符串内容的一部分。如果我们在解释器中创建一个字符串:

>>> name = u'Me'

然后请求字符串的详细信息

>>> name
u'Me'

然后显示u,因为它是关于字符串的信息的一部分,这是我们要求的。如果我们打印字符串的内容

>>> print name
Me

然后u未显示(就像引号未显示一样)。

使用解释器尝试重现您的问题,我创建了一个新用户,其中包含用户名的Unicode字符串:

>>> from django.contrib.auth.models import User
>>> new_user = User()
>>> new_user.username = u'Me'
>>> new_user.save()

和以前一样,如果我们请求有关字符串的详细信息,我们会看到u和引号,但如果我们打印字符串的内容,则不会:

>>> new_user.username
u'Me'
>>> print new_user.username
>>> Me

为了进一步确认未存储u,我们可以直接浏览数据库:

sqlite> select username from auth_user;
Me

答案 1 :(得分:0)

您需要删除每行末尾的“,” 所以,之前:

person.firstname = req.POST['firstname'],
person.midname   = req.POST['middleinitial'],
person.lastname  = req.POST['lastname'],

person.firstname = req.POST['firstname']
person.midname   = req.POST['middleinitial']
person.lastname  = req.POST['lastname']