2

我想在 Django 中显示帖子以及评论数。我目前没有帖子模型中的评论数量,我想我可以编写某种模型函数来显示帖子有多少评论,而无需在comment_count模型中放入类似的东西。

这是我的帖子模型:

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

2 回答 2

4

注释……显然是 Django 保守得最好的秘密:

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

然后,每个实例都会有一个comment_count您可以使用的属性。

于 2012-08-03T16:57:09.847 回答
1

您可以使用该comment_set属性访问与帖子关联的评论(这是默认设置,如果您在模型上设置related_nameForeignKey postComment则可以将其设置为其他内容)。要仅检索计数,请使用self.comment_set.count().

Django 文档在以下关系后面有一个部分。

于 2012-08-03T16:55:44.213 回答