2015-05-19 138 views
1

使用嗨,我目前通过Django的女孩去补习http://tutorial.djangogirls.org/en/django_orm/README.htmlDjango的Post.objects.all()不显示对象属性

我想显示我的所有帖子对象在Python外壳

from blog.models import Post 
Post.objects.all() 

它应该显示

[<Post: Title>, <Post: Title2>] 

而是它显示

[<Post: Post object>, <Post: Post object>] 

它只是说“发布对象”,而不是标题。是什么原因?我一直在关注教程,无法理解为什么它会像这样显示它。当它为所有人发布“发布对象”时,很难组织所有帖子。

我使用Python 3.4.1版和Djangon 1.8.1版。

+3

如果你使用Python 3,您需要一个'__str__'实例方法添加到您的模型显示要作为实例表示要使用的值。 – Brandon

+0

'Django Girls' - 有趣,从来不知道那个网站/组织。整齐。 ! –

+0

请[接受](https://meta.stackexchange.com/a/5235/330457)解决您的问题而不是编辑标题的答案。接受将表示问题已解决。 – ayhan

回答

3

在Django的女孩教程Chapter 9,有说明创建__str__方法为您Post型号如下:

class Post(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    created_date = models.DateTimeField(
      default=timezone.now) 
    published_date = models.DateTimeField(
      blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return self.title 

如果您仍然无法得到它的工作,请更新您的问题,包括Post类。您可能在缩进(空格数量)方面犯了错误。

+0

覆盖'__str__'是正确的解决方案 – stanleyxu2005

+0

啊,这个工作!我意识到我只有_str_而不是__str__,我误读了双下划线。谢谢! – ArtificialBeavers

0

通过如下命令

Post.objects.all() 

你得到所有的职位从您的数据库(你的情况,即2)

这就是为什么它是显示

[<Post: Post object>, <Post: Post object>] 

代替

[<Post: Title>, <Post: Title2>] 

得到以下输出

你应该尝试

  1. 方法

    Post.objects.get(PK = 1)

其中pk是的标识post

  1. 方法

    Post.objects.filter(ID = 1)

其中id是交

2

模型的ID。PY

class Post(models.Model): 
    ... 
    # python 2.x 
    def __unicode__(self): 
     return self.title 

    # python 3.x 
    def __str__(self): 
     return self.title 
相关问题