Как вывести количество комментариев в определённой статье?

models.py

class Article(models.Model):
    article_title = models.CharField('название статьи', max_length=200)
    article_text = models.TextField('текст статьи')
    min_text = models.CharField('мин текст', max_length=300)
    pub_date = models.DateTimeField('дата публикации')
    article_image = models.ImageField(null=True, blank=True, upload_to="img/", verbose_name='изображение')
    views = models.ManyToManyField(Ip, related_name="post_views", blank=True)

    def total_views(self):
        return self.views.count()

    def __str__(self):
        return self.article_title or ''

    def was_published_recently(self):
        return self.pub_date >= (timezone.now() - datetime.timedelta(days=7)) or ''


class Comment(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    author_name = models.CharField('имя автора', max_length=50)
    comment_text = models.CharField('текст комментария', max_length=200)

    def __str__(self):
        return self.author_name or ''

views.py

def index(request):
    comments_count = Comment.objects.filter().count()
    latest_artiсles_list = Article.objects.order_by('-pub_date')[:5]
    return render(request, 'articles/list.html', {'latest_artiсles_list': latest_artiсles_list, 'comments_count':comments_count})


def detail(request, article_id):
    a = get_object_or_404(Article, id=article_id)

    ip = get_client_ip(request)

    if Ip.objects.filter(ip=ip).exists():
        a.views.add(Ip.objects.get(ip=ip))
    else:
        Ip.objects.create(ip=ip)
        a.views.add(Ip.objects.get(ip=ip))

    latest_comments_list = a.comment_set.order_by('-id')[:10]
    return render(request, 'articles/detail.html', {'article': a, 'latest_comments_list': latest_comments_list})

В шаблоне я прописал {{comments_count}}. В итоге получается, что выводится количество всех комментариев в базе данных, а мне надо в статье. Как я понимаю нужно добавить какое-то значение в фильтр Comment.objects.filter().count(), но я не знаю какое.

Получаем текущую статью по id

article = Article.objects.get(pk=<pk>)

Имея на руках объект статьи можем получить список всех комментов т.к. вы указали связь в модели

comments = article.comment_set.count()

Конечно для таких манипуляций лучше использовать related_name

В дополнение к ответу @Константина

Для вывода комментариев для статей из QuerySet в шаблоне, где производится проход по статьям через {% for ... in ... %} выводите кол-во комментариев на основе примера ниже

{% for article in latest_artiсles_list %}
    <!-- Ваш html код вывода блока статьи до кол-ва коментариев -->
    {{ article.comment_set.count }}
    <!-- Ваш html код вывода блока статьи после кол-ва комментариев -->
{% endfor %}
Вернуться на верх