Django日期时间字段查询 - 按时间/小时排序

时间:2014-05-12 01:08:20

标签: django django-queryset

我正在执行查询,以使用外键WorkOrder的日期时间字段Appointment返回今天安排了约会的所有start。这是我正在使用的查询,它完全按预期工作。

WorkOrder.objects.filter(appointment__start__year=date.today().year, appointment__start__month=date.today().month, appointment__start__day=date.today().day)

我想按日期降序和小时升序对它们进行排序。 我想要的订单看起来像这样:

11-May-2014 08:00
11-May-2014 10:00
11-May-2014 12:00
10-May-2014 10:00
10-May-2014 13:00
09-May-2014 15:00
...

我尝试使用以下命令对其进行排序:

.order_by("-appointment__start", "appointment__start__hour")

但是会导致以下错误:

FieldError: Join on field 'start' not permitted. Did you misspell 'hour' for the lookup type?

似乎我只能这样做

.order_by("-appointment__start")

我应该采取另一种方式吗?或者这只是我必须忍受的事情?

1 个答案:

答案 0 :(得分:1)

您使用的是Django版本吗? 1.6?由于datetime were added in 1.6 hour字段查找。如果是这样,那么很遗憾,您无法以这种方式访问​​hour。但是,您可以使用该方法访问day

因此,您可以order_by更改为

.order_by("appointment__start", "-appointment__start__day")

这将首先按日期时间升序(将照顾小时数)然后按天下降。

,您可以使用extra()修饰符从日期时间中选择小时并按其排序。 Here's an example selecting month from a datetime。但是,由于ForeignKey,它会更复杂一些。