Вероятно, есть лучший способ сделать это, используя Условное агрегирование .
Чтобы использовать это, сначала давайте обновим отношение ForeignKey между Comentario и Like, используя related_name
:
<code>class Like(models.Model):
comment = models.ForeignKey(Comentario, <b>related_name='likes'</b>, on_delete=models.CASCADE)
Теперь используйте это связанное имя в наборе запросов:
from django.db.models import Count, Case, When, IntegerField
...
comments = noticia.comentario_set.all().annotate(
like_count=Count(Case(
When(likes__like=True, then=1),
output_field=IntegerField(),
)).annotate(dislike_count=Count(Case(
When(likes__like=False, then=1),
output_field=IntegerField(),
))
)
return render(request, 'Bola/Noticia.html', {'comments': comments})
Затем используйте его в шаблоне:
{% for comentario in comments %}
{{ comentario.like_count }}
{{ comentario.dislike_count }}
{% endfor %}