2009-11-18 8 views
0

Je suis la mise en œuvre d'une application de base du forum. Je voudrais trier les questions par leur dernier temps de réponse. J'ai la ligne suivante:Comment utiliser le tri conditionnel dans les requêtes Django?

questions = Question.objects.filter(deleted=False).order_by("last_comment__created_at") 

Cependant, cette requête ne tient pas compte des nouvelles questions sans réponses. Quel serait le meilleur moyen de résoudre ce problème sans créer un nouveau champ au modèle Question?

Répondre

1

Dans votre modèle Question, ajoutez un datetimefield appelé last_update. Placez ensuite un horodatage lors de la création de la question et mettez également à jour self.question.last_update dans la méthode de sauvegarde des commentaires. De cette façon vous pouvez trier par:

questions = Question.objects.filter(deleted=False).order_by("-last_update") 

les - signifie plus récente sera d'abord dans le queryset.

+0

Merci pour la réponse. Comme je l'ai mentionné dans la question, j'essaie de le faire sans modifier le modèle de Question. – Boolean

+0

whoops. Je suppose que j'ai raté cette partie. pouvez-vous ajouter une méthode au lieu d'un champ? Bien que ce soit plus lent, vous pouvez interroger tous les objets Question, puis utiliser la fonction sorted() avec un lambda. Je continuerai à penser à celui-ci, mais je pense vraiment que la meilleure façon consiste à modifier le modèle. –

Questions connexes