我想在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字段;我希望从数据库中提取评论的数量以及帖子。
答案 0 :(得分:4)
Annotations ......显然是Django最保密的秘密:
from django.db.models import Count
Post.objects.annotate(comment_count=Count('comment'))
然后,每个实例都有一个comment_count
属性,您可以使用。
答案 1 :(得分:1)
您可以使用comment_set
属性访问与帖子相关联的评论(如果您在related_name
模型上的post
ForeignKey上设置了Comment
,则这是默认设置,你可以把它变成别的东西)。要只检索计数,请使用self.comment_set.count()
。
Django文档在Following relationships backward下面有一节。