Disculpas si el título no tiene mucho sentido. No entiendo muy bien lo que me falta en el conocimiento.
Tengo modelos Publicar y Comentar en mi proyecto Django. Lo que intento hacer es enumerar todas las publicaciones del Blog y mostrar el NÚMERO DE COMENTARIOS DE CADA PUBLICACIÓN . Por favor, vea mis códigos a continuación.
modelos.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')
vistas.py
def main_page(request): all_blogs = Blog.objects.all() context = { 'blog' : blog, } return render(request, 'main/home.html', context)
modelo
{% for b in blog %} <div> <p>{{b.title}}</p> <div> {{WHERE THE NUMBER OF THIS POST'S COMMENTS IS DISPLAYED}} </div> </div> {% endfor %}
Todo lo que necesito es el número de los comentarios, pero no tengo idea de cómo hacerlo. ¿Hay alguna manera de hacer esto posible en la plantilla? ¿O tengo que agregar algunos códigos en views.py ?
Puede anotar los objetos del Blog con el número de Comment relacionados con:
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) Los objetos Blog que surjan de ese queryset tendrán un atributo extra .num_comments con el número de comentarios relacionados:
{% for blog in blogs %} <div> <p>{{ blog.title }}</p> <div> {{ blog.num_comments }} </div> </div> {% endfor %}