Django查询集按小时、分钟和秒排序

3

我在models.py中有一个datetime对象:

class Tournament(models.Model):
    date = models.DateTimeField('Event time')

然而,比赛可能会有每日或每周锦标赛的标志(意味着它每天或每周重复)。因此,我想按日期对我的比赛进行排序,但忽略
如何按小时、分钟和秒钟排序我的比赛?是否可以使用order_by,还是必须使用原始的sql语句?
我正在使用postgresql和django 1.8。

1个回答

4
最好的解决方案是使用 Func 函数:
Tournament.objects.order_by(Func('date', function='"time"')).all()

这是针对PostgreSQL的,因为"time"(column_name)是从timestamp中提取时间值的其中一种方式(使用函数式语法进行转换获取time部分)。


1
如果您不需要注释,可以直接使用以下表达式进行排序:Tournament.objects.order_by(Func('date', function='"time"')) - Alasdair
通过搜索相同的排序方式,我偶然发现了这个。只是想补充一下,它也可以在sqlite中使用。虽然使用类似于:order_by('date__hour', 'date__minute', 'date__second')可能看起来更“安全”。 - d6bels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接