django queryset: come ordinare in un campo correlato (all'indietro)?
-
10-07-2019 - |
Domanda
In questa situazione ho due modelli, Comment e Score. La relazione è definita nel modello di punteggio, in questo modo:
class Comment(models.Model):
content = TextField()
...
class Score(models.Model):
comment = models.ForeignKey(Comment)
value = models.IntegerField()
La mia domanda è: come si costruisce un queryset che restituisce tutti i commenti ed è ordinato in base al valore di Score?
Grazie in anticipo!
Martin
Soluzione
Dovresti cambiare il tuo modello di punteggio per usare un campo OneToOne, non un tasto ForeignKey - un FK implica che c'è più di un punteggio per commento, che non funzionerebbe mai.
Comunque sia, la query può essere fatta in questo modo:
Comment.objects.order_by('score__value')
Altri suggerimenti
Sono ancora nuovo di Django, ma ci sto lavorando da un paio di mesi. Penso che questo snippet potrebbe funzionare (in ordine crescente, per l'uso decrescente '-value'
):
comments = [ score.comment for score in Score.objects.order_by('value').all() ]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow