Django一对多关系:对象的数量

Django one to many relationship: number of objects

这是我的模型:

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)
    .
    .
    .

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

您可以通过 comments 属性 (related_name) 使用 QuerySet.count

在视图函数中使用如下:

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

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

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

如果您需要多个故事的评论数,我强烈建议您使用 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 %}