Django一对多关系:对象数量

时间:2015-01-10 16:07:58

标签: python django django-models one-to-many django-queryset

这是我的模特:

class Story(models.Model):
    writer = models.ForeignKey(UserProfile, blank=False, null=True)
    .
    .
    .

class Comment(models.Model):
    on_story = models.ForeignKey(Story, related_name="comments", blank=False, null=False)
    .
    .
    .

如何获取与特定故事相关的评论的数量,并将其注入视图?

2 个答案:

答案 0 :(得分:3)

如果您需要多个故事的评论计数,我强烈建议您使用annotations而不是在每个故事上调用comments.count()

from django.db.models import Count

stories = Story.objects.order_by("-date_published").annotate(comment_count=Count('comments'))

这将减少从N + 1到1的查询数量,使用连接在数据库中执行COUNT,而不是对每个计数执行单独的查询。然后可以按如下方式访问计数:

{% for story in stories %}
    {{ story.comment_count }}
{% endfor %}

答案 1 :(得分:-1)

您可以使用QuerySet.countcomments属性(related_name)。

在视图功能中使用以下内容:

comment_count = specific_story.comments.count()
# do something with `comment_count`

更新在模板中使用.comments.count

{% for story in stories %}
    ... {{ story.comments.count }} ...
{% endfor %}