我正在执行查询,以使用外键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")
我应该采取另一种方式吗?或者这只是我必须忍受的事情?
答案 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
,它会更复杂一些。