Django教程第1部分“投票”对象不会改变

时间:2011-12-28 10:29:25

标签: python django django-models

我是Django的新手,其教程是第1部分:Write your first app。当我想使用此命令Poll.objects.all()在python shell中查看我的Poll对象时,我看到[<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 个答案:

答案 0 :(得分:6)

我一直在努力解决同样的问题,并尝试了一切来解决它。

我重新启动了shell,重新加载了sycdb,我甚至重新启动了一个全新的项目,但仍然遇到了同样的问题。

我终于明白了!它的愚蠢和容易...

__unicode__ 每边需要两个下划线!! 所以'_'_'unicode'_'_'

我有def _unicode_(self),应该是def __unicode__(self)

我是django和python的新手,所以也许人们知道这一点,但是在教程中没有任何地方表明过,并且有两个下划线并不明显!

希望能帮助任何尝试一切的人。

答案 1 :(得分:3)

使用Windows 7,Python 3.3和Django 1.5.1时遇到同样的问题。我通过 str

替换 unicode 解决了这个问题

由于某种原因,我的配置似乎不理解 unicode

代码是:

def __str__(self):
    return self.question

它有效......

答案 2 :(得分:2)

退出shell并重新打开它。

答案 3 :(得分:2)

使用此:

# Create your models here.
from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __unicode__(self):
        return self.question


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice_text

答案 4 :(得分: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?!他们可能只是错过了......

答案 5 :(得分:0)

在更改显示之前,您需要重新启动Django项目。如果您已经重新启动它,那么检查过时的.pyc文件并将其删除。

答案 6 :(得分:0)

您正在引用模型上不存在的字段。 一旦定义了问题字段,请尝试保存一个。

p = Poll(question="what's up?")
p.save()

现在再次运行查询: - )

答案 7 :(得分:0)

我不是特别了解Django,但是Python shell在对象上调用__repr__来显示它们的值。尝试在班级中实施该方法,看看会产生什么结果。

>>> class A:
...     def __str__(self):
...         return 'str'
...     def __repr__(self):
...         return 'repr'
... 
>>> A()
repr
>>> print A()
str