我是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?>]
有什么问题?
答案 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