代码之家  ›  专栏  ›  技术社区  ›  shacker kravietz

注释和内容\对象

  •  1
  • shacker kravietz  · 技术社区  · 14 年前

    我想弄明白为什么这样做有效:

    >>> 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”都是一个注释实例。那么,为什么C在第一种情况下有一个Content-Object属性,而在第二种情况下没有呢?谢谢。

    1 回复  |  直到 14 年前
        1
  •  6
  •   Daniel Roseman    14 年前

    不,在这两种情况下都会得到一个查询集。在第一个例子中,您迭代并得到 content_object 对于查询集中的每一项-但在第二项中,出于某种原因,您尝试在整个查询集中调用它。如果您以与第一种方法相同的方式迭代第二种方法,它将工作。

    或者,这可能是您实际想要做的,您可以使用:

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

    获取ID为111的实际注释对象,而不是由一个元素组成的查询集。