Как получить обратную ссылку в шаблоне 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 import Count
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 %}