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