Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django一对多关系:对象数_Python_Django_Django Models_One To Many_Django Queryset - Fatal编程技术网

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。