tengo 2 modelos:
models.py
class Post(models.Model): title = models.CharField(max_length=255) desc = models.CharField(max_length=500) content = models.TextField() uploadedBy = models.ForeignKey(User, on_delete=models.CASCADE) LIKE_CATEGORIES = ( ("LIKE", "LIKE"), ("DISLIKE", "DISLIKE") ) class PostLike(models.Model): _type = models.CharField(max_length=200, choices=LIKE_CATEGORIES, blank=True, null=True) content = models.ForeignKey( Post, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) Quiero ordenar la Post según la cantidad de Me gusta que tiene una publicación. El número de Me gusta que tiene una publicación es el recuento de objetos PostLike que tienen _type="LIKE",content=post_object .
¿Cómo puedo ordenar una Post específicamente en función de la cantidad de Me gusta?
Puede anotar cada publicación con unrecuento de objetos PostLike relacionados, esto puede tener un filtro para contar solo los objetos relacionados que cumplen una condición. Luego ordenar por la anotación
from django.db.models import Count, Q Post.objects.annotate( likes=Count('postlike', filter=Q(postlike___type="LIKE")) ).order_by('-likes')No estoy seguro de que tener un campo con un prefijo de subrayado sea la mejor idea, puede estropear el ORM y otras partes internas de Django.
Esto restringirá su filtro a Publicar con LIKE y también lo clasificará
from django.db.models import Count Post.objects.filter(postlike___type='LIKE').annotate(likes=Count('postlike')).order_by('-likes') Or from django.db.models import Count Post.objects.filter(postlike___type='LIKE').annotate(Count('postlike'))[::-1]