Отображение количества комментариев каждого поста, относящихся к одному и тому же посту в django

Здравствуйте друзья, я создаю блог и столкнулся с проблемой. Моя проблема заключается в том, что когда я хочу отобразить количество комментариев для каждого поста, на главной странице блога количество комментариев отображает все посты, которые имеют комментарии, но количество комментариев для каждого поста одинаковое. В случае, если пост 2 имеет 3 комментария, а другой имеет 1 комментарий.

Вы можете увидеть на этой фотографии. Изображение

Это мой models.py

class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
email = models.EmailField()
comment = models.CharField(max_length=500)
active = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return "{} by {}".format(self.comment, self.name)

Это мой views.py

def post_list(request):
posts = models.Post.objects.filter(status='published')
paginator = Paginator(posts, 4)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
comment_count = models.Comment.objects.filter(active=True).count()
context = {
    'page_obj': page_obj,
    'comment_count': comment_count,
}
# print(posts)
return render(request, "post_list.html", context=context)

И это тоже post_list.html

        <article class="col-12 col-md-6 tm-post">
        <hr class="tm-hr-primary">

        <a href="{{ post.get_absolute_url }}"
           class="effect-lily tm-post-link tm-pt-60">
            <div class="tm-post-link-inner">
                <img src="/{{ post.image }}/" alt="Image" class="img-fluid">
            </div>

            <h2 class="tm-pt-30 tm-color-primary tm-post-title">{{ post.title }}</h2>
        </a>

        <p class="tm-pt-30">
            {{ post.body|slice:254 }}
        </p>

        <div class="d-flex justify-content-between tm-pt-45">
            <span class="tm-color-primary">Travel . Events</span>
            <span class="tm-color-primary">{{ post.created_date.year }}/{{ post.created_date.month }}/{{ post.created_date.day }}</span>
        </div>

        <hr>

        <div class="d-flex justify-content-between">
                <span>
                    {% for comment in post.active_comment|slice:"1" %}
                        {{ comment_count }}<span> Comment</span>
                    {% endfor %}
                </span>
            <span>{{ post.author|capfirst }}</span>
        </div>
    </article>

пожалуйста, направьте меня.

Вы можете .annotate(…) [Django-doc] с:

from django.db.models import Count, Q

# …

posts = Post.objects.annotate(number_of_comments=Count('comment_set', filter=Q(comment_set__active=True)))

Объекты Post, возникающие в результате этого QuerySet, будут иметь дополнительный атрибут .number_of_comments.

Основываясь на сообщении @willem, вам нужно соответствующим образом отредактировать ваш шаблон:

posts = Post.objects.annotate(number_of_comments=Count('comment_set', filter=Q(comment_set__active=True)))

и в шаблоне

<div class="d-flex justify-content-between">
   <span>{{post.number_of_comments}}</span>
   <span>{{ post.author|capfirst }}</span>
</div>

Вы указали имя related_name как "comments" в модели комментариев. Именно отсюда и возникает ошибка Fielderror. Измените "comment_set" внутри запроса на "comments" и посмотрим

Вернуться на верх