2010-11-21 10 views
3

Ich habe eine Liste von Menschen, jede Person hat ein Geburtsdatum, die vorhersehbar in einer DateField gespeichert ist. Ich versuche eine Liste dieser Leute zu erstellen - sortiert nach dem Monat und Tag ihrer Geburt (das Jahr nicht berücksichtigend) - um eine Art von "Who's birthday is coming up" -Display zu haben.Bestellung eines Django QuerySets nach Datum/Monat?

Ich kann nicht scheinen QuerySet durch die Person datetime.month Wert zu bestellen. Gibt es irgendeine Möglichkeit, dass dies getan werden könnte, ohne auf ein list() gezwungen zu werden?

Vielen Dank im Voraus und bitte lassen Sie mich wissen, wenn die Frage Klärung benötigt.

Antwort

5

können Sie QuerySet.extra() verwenden, um einen Monat Feld zu definieren und zu sortieren, indem sie es:

SomeModel.objects.extra(select={'birthmonth': 'MONTH(birthdate)'}, 
    order_by=['birthmonth']) 
+4

Vielen Dank für die schnelle Antwort! Wollte nur für diejenigen klären, die PostgreSQL verwenden, um 'MONTH (Geburtsdatum)' durch 'EXTRACT (MONAT VON Geburtsdatum) 'zu ersetzen. –

+0

Korrekter Methodenname ist extra – falko

+0

So viel wie ich diese Antwort liebe, scheint es, dass die QuerySet.extra() -Methode auf dem Hackblock ist und schließlich veraltet sein wird. Die Django-Dokumentation besagt: "Verwenden Sie diese Methode als letztes Mittel" und "Dies ist eine alte API, die wir irgendwann in der Zukunft ablehnen möchten." – jbiz

Verwandte Themen