Django教程第一部分 'Poll'对象未改变

2 投票
8 回答
3565 浏览
提问于 2025-04-17 09:08

我刚开始学习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 个回答

3

我在使用Windows 7、Python 3.3和Django 1.5.1的时候也遇到了同样的问题。我通过把unicode替换成str来解决了这个问题。

不知道为什么,我的设置似乎不支持unicode

代码变成了:

def __str__(self):
    return self.question

然后就可以正常工作了...

6

我一直在为这个问题苦恼,试了很多方法来解决它。

我重启了终端,重新加载了sycdb,甚至从头开始做了一个全新的项目,但问题还是没解决。

最后我终于搞明白了!这真是个简单又傻的错误……

__unicode__ 两边都需要两个下划线!! 所以应该是 '__unicode__'

我写成了 def _unicode_(self),其实应该是 def __unicode__(self)

我对django和python还很陌生,也许这对其他人来说是常识,但在教程里并没有说明,而且两个下划线并不明显!

希望这能帮助到那些尝试过 所有方法的人。

1

最后我找到了我的答案:

根据教程,我在我的models.py文件里加了这段代码:

def was_published_today(self):
return self.pub_date.date() == datetime.date.today()

但是当我把这两行代码删掉后,我能看到“怎么了?”而不是[<Poll: Poll object>]!!我不知道为什么会这样,但它就是有效了!
我刚接触django和python,我觉得这可能是因为没有在Poll类下面定义was_published_today这个方法吧?他们可能就是漏掉了这一步……

撰写回答