按日期时间的月份/日期排序Django QuerySet?

问题描述:

我有一个人的名单,每个人都有一个出生日期,这是可预测地存储在DateField。我试图创建这些人的列表 - 根据他们出生的个月排序 - 显示某种“谁的生日即将到来”显示。按日期时间的月份/日期排序Django QuerySet?

我似乎无法通过该人的datetime.month值订购QuerySet。有什么办法可以做到这一点,而不必诉诸强制list()

在此先感谢,请让我知道如果问题需要澄清。

可以使用QuerySet.extra()通过它来定义一个月份字段和排序:

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

谢谢你的快速解答!只是想澄清那些使用PostgreSQL用'EXTRACT(MONTH FROM birthdate)'替换'MONTH(birthdate)''的人。 – 2010-11-21 03:41:44

+0

正确的方法名称是额外的 – falko 2014-02-20 17:16:34

+0

尽管我喜欢这个答案,但似乎QuerySet.extra()方法在斩波块上,并且最终将被弃用。 django文档声明:“使用这种方法作为最后的手段”和“这是一个旧API,我们打算在将来某个时候弃用”。 – jbiz 2015-12-02 18:27:30

较新版本的Django的对DateFields和DateTimeFields查找。 https://docs.djangoproject.com/en/1.11/ref/models/database-functions/#extract

MyModel.objects.order_by('birthday__month', 'birthday__day')