如何在Django模板中获得反向引用?

  • 本文关键字:引用 Django python django
  • 更新时间 :
  • 英文 :


如果标题没有太大意义,请道歉。我不太明白我缺乏什么知识。
我有一个Post和Comment模型在我的Django项目。我想做的是列出所有的Blog帖子,并显示每个帖子的评论数. 请看下面我的代码。

models.py

class Blog(models.Model):
objects = models.Manager()
title = models.CharField(max_length=100, blank=True)
body = models.CharField(max_length=10000, blank=True)
created_at = models.DateField(auto_now_add=False)
class Comment(models.Model):
objects = models.Manager()
post = models.ForeignKey(Blog, on_delete=models.CASCADE, related_name='comment')


views.py

def main_page(request):
all_blogs = Blog.objects.all()

context = {
'blog' : blog,
}

return render(request, 'main/home.html', context)


模板
{% for b in blog %}
<div>
<p>{{b.title}}</p>
<div>
{{WHERE THE NUMBER OF THIS POST'S COMMENTS IS DISPLAYED}}
</div>
</div>
{% endfor %}


所有我需要的是评论的数量,但不知道怎么做。有没有办法在模板中实现这一点?或者我必须在views.py中添加一些代码吗?

可以用以下方式标注Blog对象对应的Comment对象个数:

from django.db.models importCount
def main_page(request):
all_blogs = Blog.objects.annotate(
num_comments=Count('comment')
)
context = {
'blogs' : blogs
}
return render(request, 'main/home.html', context)

从该查询集产生的Blog对象将具有带有相关注释数量的额外属性.num_comments:

{% for blog in blogs %}
<div>
<p>{{ blog.title }}</p>
<div>
{{blog.num_comments}}
</div>
</div>
{% endfor %}

最新更新