2012-03-03 18 views
6

daha büyük olduğu doğru veri almak. Ancak bugün tarih ise, bugünkü olayları now.time()'dan daha büyük bir zamanla almak istiyorum. django: Tarih ve saat böyle bir etkinliği tanımlayan bir modele sahip şimdi

Bu

yapıyorum budur:

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

nerede now = datetime.datetime.now()

Ama sadece olay yarın ve onun zaman şimdiki zaman küçükse o bana boş bir set verir çünkü bu, yanlış (örneğin, olay yarın saat 09: 00'da ve bugün saat 19: 00'da)

bu django'da mümkün mü?

PS: Kümede geçiş yapmaktan kaçınmak istiyorum.

+1

Neden tarih ve zaman kazanmak için iki ayrı alanlar kullanıyorsunuz? Neden sadece bir zaman aralığı değil? Böylelikle iki yerine tek bir alanı sorgulayabilirsiniz. –

+3

@pastylegs, süreyi sonlandırmadan önce bir etkinliğin gününe karar verdiğinizi varsayalım. Zamanın bilinmediğini göstermek için saati gece yarısına (veya başka bir saate) ayarlayabilirsiniz, ancak ayrı bir zaman alanına sahip olmak ve saklamak için daha uygun olabilir. Dezavantajı, op'un daha garip olması gibi sorgulamalar yapmasıdır. – Alasdair

+0

bunu düşünmedim - iyi bir nokta –

cevap

9

OR ifadeleriyle sorgu yapmanıza izin veren Q nesnesini kullanın. siz de time sahada sıralamak isteyebilirsiniz

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') 

Not:

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

Q nesnesini kullanmayı denedim, ancak doğru şekilde yapmadım. Yaptığın şey doğru. Teşekkürler! django.db.models Q' içe Ama sadece DateTimeField kullanıyorsanız bunu gereksizdir gelen ' : Django 1.5.1 için – xpanta

+2

Güncelleme ' olaylar = Event.objects.filter (date__gt = datetime.now()) .order_by ('- date') ' –

+1

@RyanAllen Django 1.5'in orijinal soruyu veya cevabı etkilediğini sanmıyorum. Django'nun önceki sürümlerinde de DateTimeField kullanılmıştı, ancak OP yukarıdaki yorumlar bölümünde tartışıldığı gibi iki ayrı alan kullanmak zorunda kaldı. – Alasdair

İlgili konular