2012-08-03 51 views
2

我想显示帖子以及Django中的评论数量。我现在没有在Post模型中发布的评论数量,我想我可以编写某种模型函数来显示帖子有多少评论,而不需要在模型中添加comment_count之类的内容。将评论数量添加到Django中的查询集

这里是我的Post模型:

class Post(models.Model): 
    user = models.ForeignKey(User, unique=False) 
    headline = models.CharField(max_length=400, verbose_name="post headline") 
    type = models.CharField(max_length=4) 
    branch = models.ForeignKey(Branch, verbose_name="branch name", validators=[branch_exists]) 
    upvotes = models.IntegerField() 
    is_starred = models.BooleanField() 
    url_title = models.SlugField() 
    creation = models.DateTimeField() 
    thumbnail = models.URLField(blank=True) 
    body = models.TextField(max_length=90000, blank=False) 
    link = models.URLField(blank=False, verbose_name="your link URL") 

    def __unicode__(self): 
     return u"`%s' posted by %s at %s\n" % (self.headline, self.user, self.creation) 

这里是我的评论模式:

class Comment(models.Model): 
    user = models.ForeignKey(User, unique="False") 
    time = models.DateTimeField() 
    upvotes = models.IntegerField() 
    post = models.ForeignKey(Post, unique="False") 
    formatting = models.BooleanField(verbose_name="Format comment?") 
    text = models.TextField(max_length=9000, blank=False) 
    anonymous = models.BooleanField(verbose_name="Post comment anonymously?") 

我想要做的事,如:

def __unicode__(self): 
    return u"`%s' posted by %s at %s with %s comments" % (self.headline, self.user, self.creation, self.comment_count) 

但没有COMMENT_COUNT场;我希望评论的数量和帖子一起从数据库中提取出来。

回答

4

Annotations ......显然Django的最好的秘密:

from django.db.models import Count 
Post.objects.annotate(comment_count=Count('comment')) 

然后,每个实例将有一个comment_count属性就可以使用。

1

,您可以访问使用comment_set属性帖子相关联的注释(这是默认的,如果你对你的Comment模型设置你的post ForeignKey的related_name,你可以把它别的东西)。要检索计数,请使用self.comment_set.count()

Django文档在Following relationships backward下有一节。