django queryset: ¿cómo ordenar por un campo relacionado (hacia atrás)?
-
10-07-2019 - |
Pregunta
En esta situación tengo dos modelos, Comentario y Puntuación. La relación se define en el modelo de Puntuación, así:
class Comment(models.Model):
content = TextField()
...
class Score(models.Model):
comment = models.ForeignKey(Comment)
value = models.IntegerField()
Mi pregunta es: ¿Cómo construyo un conjunto de consultas que devuelva todos los Comentarios y esté ordenado por el valor de Puntuación?
¡Gracias de antemano!
Martin
Solución
Debe cambiar su modelo de Puntuación para usar un campo OneToOne, no una ForeignKey: un FK implica que hay más de una Calificación por Comentario, lo que nunca funcionaría.
Sin embargo, de cualquier manera, la consulta se puede hacer así:
Comment.objects.order_by('score__value')
Otros consejos
Todavía soy nuevo en Django, pero he estado trabajando con él durante un par de meses. Creo que este fragmento podría funcionar (en orden ascendente, para uso descendente '-value'
):
comments = [ score.comment for score in Score.objects.order_by('value').all() ]