Django教程第一部分 'Poll'对象未改变
我刚开始学习Django,正在看它的教程 - 第1部分:写你的第一个应用。当我想在Python命令行中查看我的投票对象时,我输入了这个命令 Poll.objects.all()
,结果看到的是 [<Poll: Poll object>]
,但是我已经修改了我的 models.py
文件,并添加了
class Poll(models.Model):
def __unicode__(self):
return self.question
class Choice(models.Model):
def __unicode__(self):
return self.choice
但我应该看到的是:
[<Poll: What's up?>]
那这是怎么回事呢?
8 个回答
我在使用Windows 7、Python 3.3和Django 1.5.1的时候也遇到了同样的问题。我通过把unicode替换成str来解决了这个问题。
不知道为什么,我的设置似乎不支持unicode。
代码变成了:
def __str__(self):
return self.question
然后就可以正常工作了...
我一直在为这个问题苦恼,试了很多方法来解决它。
我重启了终端,重新加载了sycdb,甚至从头开始做了一个全新的项目,但问题还是没解决。
最后我终于搞明白了!这真是个简单又傻的错误……
__unicode__
两边都需要两个下划线!! 所以应该是 '__unicode__'
我写成了 def _unicode_(self)
,其实应该是 def __unicode__(self)
。
我对django和python还很陌生,也许这对其他人来说是常识,但在教程里并没有说明,而且两个下划线并不明显!
希望这能帮助到那些尝试过 所有方法的人。
最后我找到了我的答案:
根据教程,我在我的models.py文件里加了这段代码:
def was_published_today(self):
return self.pub_date.date() == datetime.date.today()
但是当我把这两行代码删掉后,我能看到“怎么了?”而不是[<Poll: Poll object>]
!!我不知道为什么会这样,但它就是有效了!
我刚接触django和python,我觉得这可能是因为没有在Poll类下面定义was_published_today这个方法吧?他们可能就是漏掉了这一步……