2010-08-16 100 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