es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ordenar modelos de Django por otro queryset de longitud de modelo.

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)

CATEGORÍAS_DE_GUSTO = (
(“ME GUSTA”, “ME GUSTA”),
(“NO ME GUSTA”, “NO ME GUSTA”)
)

class PostLike(models.Model):
_type = models.CharField(max_length=200, choices=CATEGORÍAS_DE_GUSTO, 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 el modelo Post según el número de “Me gusta” que tenga. El número de “Me gusta” de un post es el recuento de objetos PostLike que tienen _type = “ME GUSTA” y content = objecto_post.

¿Cómo puedo ordenar Post específicamente según el número de “Me gusta”?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puedes ordenar Publicaciones basadas en el número de “me gusta” usando el método annotate en la API de QuerySet. El método annotate te permite agregar un campo adicional al modelo de Publicaciones que contiene el número de “me gusta” para cada publicación. Luego puedes usar el método order_by para ordenar los objetos de Publicaciones basados en el número de “me gusta”.

    Por ejemplo:

    from django.db.models import Count
    
    publicaciones = Publicaciones.objects.annotate(num_likes=Count('publicaciongusta', filter=Q(_type='LIKE'))).order_by('-num_likes')
    

    Esto devolverá un QuerySet de objetos de Publicaciones ordenados por el número de “me gusta”, siendo las publicaciones más gustadas las primeras.

Comments are closed.