2014-05-12 5 views
1

외래 키 Appointment의 datetime 필드 start을 사용하여 오늘 예약 된 약속이있는 WorkOrder을 모두 반환하는 쿼리를 수행하고 있습니다. 이것은 사용중인 쿼리이며 예상대로 정확하게 작동합니다.Django 날짜/시간 필드 쿼리 - 시간/시간별로 정렬

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

장고 버전 < 1.6을 사용하고 있습니까? datetime 필드 조회로 인해 hourwere added in 1.6. 그렇다면 불행히도 그런 식으로 hour에 액세스 할 수 없습니다. 그러나 해당 방법을 사용하여 day에 액세스 할 수 있습니다.

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

(시간의 처리됩니다) 날짜 오름차순으로이 의지 첫 번째 순서 다음 날 내림차순 :

따라서, 당신은 당신의 order_by을 변경할 수 있습니다.

또는 수정자를 사용하면 extra() 수정자를 사용하여 datetime에서 시간을 선택하고 순서를 지정할 수 있습니다. Here's an example selecting month from a datetime. 그러나 ForeignKey으로 인해 조금 더 복잡해집니다.

+1

장고 1.6을 사용하고 있습니다. 불행히도 나는 __day, __hour, __month, __year 등을 order_by 내부에서 액세스 할 수 없으므로 다음과 같은 오류가 발생합니다. "FieldError : 필드 'start'에 대한 조인이 허용되지 않습니다. 조회를 위해 'day'의 철자를 잘못 입력 했습니까? 유형?" 나는 여분의 필드를 체크 아웃 할 것이고 나쁠 때는 별개의 시간 필드에 주석을 달아서 정렬 할 수 있습니다. pcoronel에 도움을 주셔서 감사합니다. – Del

관련 문제