我有一個人的名單,每個人都有一個出生日期,這是可預測地存儲在DateField
。我試圖創建這些人的列表 - 根據他們出生的個月和天排序 - 顯示某種「誰的生日即將到來」顯示。按日期時間的月份/日期排序Django QuerySet?
我似乎無法通過該人的datetime.month
值訂購QuerySet
。有什麼辦法可以做到這一點,而不必訴諸強制list()
?
在此先感謝,請讓我知道如果問題需要澄清。
我有一個人的名單,每個人都有一個出生日期,這是可預測地存儲在DateField
。我試圖創建這些人的列表 - 根據他們出生的個月和天排序 - 顯示某種「誰的生日即將到來」顯示。按日期時間的月份/日期排序Django QuerySet?
我似乎無法通過該人的datetime.month
值訂購QuerySet
。有什麼辦法可以做到這一點,而不必訴諸強制list()
?
在此先感謝,請讓我知道如果問題需要澄清。
可以使用QuerySet.extra()
通過它來定義一個月份字段和排序:
SomeModel.objects.extra(select={'birthmonth': 'MONTH(birthdate)'},
order_by=['birthmonth'])
較新版本的Django的對DateFields和DateTimeFields查找。 https://docs.djangoproject.com/en/1.11/ref/models/database-functions/#extract
MyModel.objects.order_by('birthday__month', 'birthday__day')
謝謝你的快速解答!只是想澄清那些使用PostgreSQL用'EXTRACT(MONTH FROM birthdate)'替換'MONTH(birthdate)''的人。 – 2010-11-21 03:41:44
正確的方法名稱是額外的 – falko 2014-02-20 17:16:34
儘管我喜歡這個答案,但似乎QuerySet.extra()方法在斬波塊上,並且最終將被棄用。 django文檔聲明:「使用這種方法作爲最後的手段」和「這是一箇舊API,我們打算在將來某個時候棄用」。 – jbiz 2015-12-02 18:27:30