2010-08-16 99 views
1

我試圖找出爲什麼這個工程:評論和content_object

>>> comments = Comment.objects.all() 
>>>[c.content_object for c in comments] 

[返回註釋附加到對象的列表]

但這並不:

>>> c = Comment.objects.filter(id=111) 
>>> c 

[<Comment: Related object name here ...>] 
>>> c.content_object 

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'QuerySet' object has no attribute 'content_object' 

在這兩種情況下,每個「c」都是一個Comment實例。那麼爲什麼c在第一種情況下有一個content_object屬性,但在第二種情況下卻沒有?謝謝。

回答

6

不,在這兩種情況下你都會得到一個查詢集。在第一個中,您迭代並獲取查詢集中每個項目的content_object - 但是在第二個項目中,出於某種原因,您嘗試在整個查詢集上調用它。如果你像第一個一樣迭代第二個,它就會工作。

另外,這可能是你真正想做的事,你可以使用:

c = Comment.objects.get(id=111) 

獲得實際的評價對象ID爲111,而不是由一個元素的查詢集。

+0

完全正確的丹尼爾。不知道我錯過了什麼(這是遲到:),但謝謝。 – shacker 2010-08-16 18:22:49