2015-05-19 186 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