django queryset: comment commander par un champ lié (en arrière)?
-
10-07-2019 - |
Question
Dans cette situation, j'ai deux modèles, Comment et Score. La relation est définie dans le modèle Score, comme suit:
class Comment(models.Model):
content = TextField()
...
class Score(models.Model):
comment = models.ForeignKey(Comment)
value = models.IntegerField()
Ma question est la suivante: comment puis-je construire un ensemble de requêtes qui renvoie tous les commentaires et est classé par la valeur de Score?
Merci d'avance!
Martin
La solution
Vous devez modifier votre modèle de score pour utiliser un champ OneToOne et non une clé étrangère. Un FK implique qu'il existe plus d'un score par commentaire, ce qui ne fonctionnerait jamais.
Cependant, dans tous les cas, la requête peut être effectuée comme suit:
Comment.objects.order_by('score__value')
Autres conseils
Je suis encore nouveau à Django, mais je travaille avec cela depuis quelques mois maintenant. Je pense que cet extrait pourrait fonctionner (dans l'ordre croissant, pour une utilisation décroissante '- valeur' ??
):
comments = [ score.comment for score in Score.objects.order_by('value').all() ]