Как вывести количество комментариев в определённой статье?
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 %}