Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
order_by crea entradas duplicadas

Tengo 4 clases de modelos: Usuario, Pila, Artículo y Calificación. Los usuarios pueden crear pilas, agregar artículos, ponerlos en una pila, calificar los artículos y compartir las pilas. Quiero obtener un QuerySet de todos los artículos de una pila específica (obtenidos por pk) y ordenados por la calificación actual de los usuarios. Mi consulta conduce a entradas duplicadas en mi QuerySet si la pila se compartió y otro usuario calificó un artículo, por lo que existe un objeto de calificación para un artículo dos veces:

 qs = stack.article_set.all().order_by("ratings__rating", "-pk")

modelos:

 class Rating(models.Model): article = models.ForeignKey( Article, on_delete=models.CASCADE, related_name='ratings' ) user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ratings' ) rating = models.IntegerField() class Stack(models.Model): title = models.CharField(null=True, max_length=100) owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) class Article(models.Model): stack = models.ForeignKey(Stack, null=True, blank=True, on_delete=models.CASCADE) text = models.TextField(null=True, blank=True)

¿Cómo puedo obtener el QuerySet ordenado sin los duplicados, solo ordenado por las calificaciones de request.user?

Actualizar

Lo que hago por ahora es consultar dos veces. Una vez para ordenar los objetos de artículo ya calificados por calificación y una segunda vez para ordenar los objetos de artículo actualmente no calificados.

 context['rated_articles'] = deck.article_set.filter( ratings__user__exact=self.request.user ).order_by("ratings__rating", "-pk") context['not_rated_articles'] = deck.article_set.all().exclude( ratings__user__exact=self.request.user )
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debería poder filtrar el conjunto de artículos antes de ordenarlo, según el propietario de las pilas

 user = stack.owner stack.article_set.filter(rating__user__exact=user).order_by("ratings__rating", "-pk")
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda