2009-06-11 32 views
19

Django'da bir aydan daha kısa bir tarihle tüm nesneleri almanın bir yolu var mı? gibiBir aydan daha az tüm öğeleri alma

şey:

items = Item.objects.filter(less than a month old).order_by(...) 
+0

"Tüm nesneler" ne demek istiyorsun? Belirli bir türdeki tüm nesneleri mi kastediyorsunuz? –

+0

Evet, "Öğeler" türündeki tüm nesneler –

cevap

32

bir "ay" tutarındaki tanımı nedir? 30 gün? 31 gün mü? O Geçmiş, bunu yapmak gerekir:

from datetime import datetime, timedelta 
last_month = datetime.today() - timedelta(days=30) 
items = Item.objects.filter(my_date__gte=last_month).order_by(...) 

gte alan arama, advantange götürür.

+1

Bu, datetime.today() 1 Mart - geçen ay Ocak değil, Şubat olduğunda başarısız olur. İhtiyacınız yoksa, bu iyi çalışır (30 gün önce = geçen ay) ama aslında geçen ay neler olduğunu bilmeniz gerekiyorsa, python'da bunun hakkında kolay bir yol yoktur. (BİLDİĞİM KADARIYLA). –

+1

* ** python-dateutil ** içinde * relatiedelta * olduğunu size tam olarak geçen ay verebilir. – Neutralizer

+0

[Here] (https://stackoverflow.com/a/9725093/209050) 'datetime' dışında hiçbir şey kullanmadan bir önceki ayı elde etmenin tek yolu. – mgalgs

4
items = Item.objects.filter(created_date__gte=aMonthAgo) 

aMonthAgo, datetime ve timedelta tarafından hesaplanacaktır.