Python Django一对多关系:对象数
这是我的模型:Python Django一对多关系:对象数,python,django,django-models,one-to-many,django-queryset,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) .
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)
.
.
.
如何获取与特定故事相关的评论数,并将其注入视图?您可以通过评论
属性(相关名称)使用
在查看功能中使用以下命令:
comment_count = specific_story.comments.count()
# do something with `comment_count`
更新使用模板中的注释.计数
:
{% for story in stories %}
... {{ story.comments.count }} ...
{% endfor %}
如果您需要多个故事的评论计数,我强烈建议您在每个故事上使用而不是调用
comments.count()
:
from django.db.models import Count
stories = Story.objects.order_by("-date_published").annotate(comment_count=Count('comments'))
这将使查询的数量从N+1减少到1,使用联接在数据库中执行计数
,而不是对每个计数进行单独的查询。然后可按如下方式访问计数:
{% for story in stories %}
{{ story.comment_count }}
{% endfor %}
如果我像这样实现我的视图:def index(request):story\u list=story.objects.order\u by(“-date\u published”)。context={'stories':stories}返回render(请求'stories/index.html',context)如何获取模板中各个故事的评论数?@Lumsum,我在阅读了您的评论后更新了答案。请检查一下。实际上,你可以在模板中调用comments.count。@DanielRoseman,你说得对。我忘了在模板中可以调用方法。谢谢你指出这一点。我相应地更新了答案。我只是问了类似的问题[link]:(),得到了类似的答案。我发现下面的注释答案快了大约3倍,这并不奇怪,因为视图中的查询比模板中的操作更接近db。