2009-12-31 6 views
21

일은 예를 들어 사용자가 입력 한 일보다 오래 된 결과를 얻으려면 입력합니다. 예를 들어, 사용자가 32 일 동안 30 일 이상 결과를 얻는 경우입니다.일보다 오래된 장고 필터가 있습니까?

A quick try-out: 

class Entry(models.Model): 
    entered = models.DateTimeField() 

>>> from datetime import datetime 
>>> Entry(entered = datetime.now()).save() 
>>> Entry.objects.filter(entered__lte = datetime.now()) 
[<Entry: Entry object>] 
>>> Entry.objects.filter(entered__gte = datetime.now()) 
[] 
>>> Entry.objects.filter(entered__gte = datetime.now(), entered__lte=datetime(2009,11,1,0,0)) 
[<Entry: Entry object>] 

내 문제와 내 입력 필드

for day_filter in xrange(1,int(last_contact_filled)+1): 
       qdict['last_contact__day']=day_filter 

장고에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까에서

xxxx__day__lte. 

last_contact_filled 입력을하려고? 내 케이스의 필터는 일입니까?

답변

53

무언가가 당신을 위해 일 것입니다 : 당신이 나를이 곳에 추가, 추가 할 whant

from datetime import datetime, timedelta 
how_many_days = 30 
MyObject.objects.filter(entered__gte=datetime.now()-timedelta(days=how_many_days)) 
+0

예 작품 ... 고마워 ... :) – kn3l

+3

표준 시간대 지원이 활성화되어있는 동안 원시 시간 오류 (RuntimeWarning : DateTimeField xxx.created_at가 순진한 datetime (2016-05-01 11 : 31 : 59.768065) ​​수신)을 방지하십시오. 지금 djangos timezone을 가져와야합니다. django.utils.timezone 가져 오기 now – gustavgans

3

필터의 datetimetimedelta(-30)을 추가하십시오. 이 같은

+0

와 장고 timezone.now()를 사용할 수 있습니까? – kn3l

+0

'datetime.now() + timedelta (-30)'예를 들어. –

4

우리는 이해 해달라고 timedelta

from datetime import timedelta 
from django.utils import timezone 
time_threshold = timezone.now() - timedelta(days=7) 
Entry.objects.filter(entered__gte=time_threshold) 
관련 문제