2012-03-03 2 views
6

보다 큰 경우 정확하게 데이터를 검색 할 수 있습니다. 그러나 오늘 날짜 인 경우 오늘의 이벤트를 now.time() 이상의 시간에 검색하고 싶습니다. 장고 : 날짜와 시간이 같은 이벤트를 설명하는 모델을 가지고 지금

내가 뭐하는 거지입니다 :

events = Event.objects.filter(date__gte=now.date()).filter(time__gte=now.time()).order_by('-date') 

now = datetime.datetime.now()

그러나 유일한 이벤트가 내일이고 그것의 시간이 현재 시간보다 작은 경우는 나에게 빈 세트를 제공하기 때문에 이것은 잘못된 것입니다 (예를 들어 이벤트가 내일 09:00에 오늘이 19:00 인 경우)

django에서 이것이 가능합니까?

추신 : 나는 세트를 통해 반복하지 않도록하고 싶습니다.

+1

왜 날짜와 시간을 절약하기 위해 두 개의 분리 된 필드를 사용하고 있습니까? 왜 단 하나의 datetime 필드가 아닌가? 이렇게하면 두 개가 아닌 단일 필드를 간단하게 쿼리 할 수 ​​있습니다. –

+3

@pastylegs는 시간을 결정하기 전에 이벤트의 날짜를 결정한다고 가정합니다. 시간을 알 수 없으므로 자정 (또는 기타) 시간을 설정할 수 있지만 시간 필드를 별도로 지정하고 저장하지 않는 것이 더 편리 할 수 ​​있습니다. 단점은 op와 같은 쿼리가 더 어색하다는 것입니다. – Alasdair

+0

그런 생각을하지 못했습니다 - 좋은 지적 –

답변

9

Q 개체를 사용하면 OR 문을 사용하여 쿼리 할 수 ​​있습니다. 당신이뿐만 아니라 time 필드를 정렬 할 수 있습니다

from django.db.models import Q 
Events = Event.objects.filter(Q(date=now.date(),time__gte=now.time())|Q(date__gt=now.date())).order_by('-date') 

참고 :

order_by('-date', '-time') 
+0

Q 개체를 사용하려고했지만 올바르게 처리하지 못했습니다. 당신이 한 일은 옳습니다. 감사! – xpanta

+2

Django 1.5.1 용 업데이트 : 'django.db.models import Q' DateTimeField : 'events = event.objects.filter (date__gt = datetime.now())를 사용하면 불필요합니다. .order_by ('- date')' –

+1

@ RyanAllen Django 1.5가 원래의 질문이나 대답에 영향을 미치지 않는다고 생각합니다. Django의 이전 버전에도'DateTimeField'가 있었지만, OP는 위의 주석에서 설명한 것처럼 두 개의 별도 필드를 사용해야했습니다. – Alasdair

관련 문제