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 %}
这是我的模型:
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 %}