请教大家一个 django 的问题

2016-09-20 18:34:15 +08:00
 onefouroo
model 如下
class Student(models.Model):
user = models.ForeignKey('auth.User', null=True, blank=True, verbose_name=u'学员')
created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)

def __unicode__(self):
return self.user

然后运行
然后报错
coercing to Unicode: need string or buffer, User found

然后修改
def __unicode__(self):
return str(self.user)

然后就不报错了。
我 google 半天也不知道为什么,求大神指点一下
2797 次点击
所在节点    Python
15 条回复
onefouroo
2016-09-20 18:36:32 +08:00
第一次发帖,不知道怎么缩进
xidianlz
2016-09-20 18:39:35 +08:00
看报错信息, self.user 不是 str 的
onefouroo
2016-09-20 18:43:27 +08:00
@xidianlz 你好
但是我把 model 改了一下
class Student(models.Model):
user = models.ForeignKey('auth.User', null=True, blank=True, verbose_name=u'学员')
user_fullname = models.CharField(max_length=255)
created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)

def __unicode__(self):
return self.user_fullname

报同样的错误, user_fullname 我输入的肯定是 str 但是报同样错误
Shawdon
2016-09-20 18:51:05 +08:00
LZ 先 google 下这个函数__unicode__,了解下它的相关信息。
你的 user_fullname 也不是一个 str ,而是 models.CharField **对象**!!
kkx
2016-09-20 18:55:59 +08:00
@onefouroo return u"{}".format(self.user)
saturnisbig
2016-09-20 19:00:59 +08:00
self.user 是个 foreignkey
onefouroo
2016-09-20 19:41:54 +08:00
@Shawdon
@kkx
@saturnisbig

谢谢大家。突然明白了。
glasslion
2016-09-20 22:28:52 +08:00
@onefouroo 你确定 user_fullname 会报一样的错?
glasslion
2016-09-20 22:30:26 +08:00
@Shawdon CharField 这个 descrispter 在__get__ 访问时返回的 unicode
georgema1982
2016-09-21 04:28:09 +08:00
错误原因你应该已经明白了。但是我不赞同你用 str(self.user) 。最好是用 django 的 force_text
Shawdon
2016-09-21 10:53:32 +08:00
@glasslion 何以见得?
glasslion
2016-09-21 11:38:57 +08:00
@Shawdon 你没用过 django?
Shawdon
2016-09-22 10:30:14 +08:00
@glasslion 用过。我的意思是 “ return self.user_fullname ” 怎么会返回 unicode 。。
glasslion
2016-09-22 12:44:16 +08:00
@Shawdon CharField 在访问时的返回的就是 unicode

```
class CharField(Field):

def to_python(self, value):
if isinstance(value, six.string_types) or value is None:
return value
return force_text(value)
```

原理: https://code.djangoproject.com/wiki/DevModelCreation
Shawdon
2016-09-25 16:20:00 +08:00
@glasslion 今天才有时间好好读读链接里的内容,受益匪浅。兄弟对 Django 或 Python 的造诣是远远大于我的(手动赞),谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX