2009-12-31 39 views
21

Ngày là số người dùng sẽ nhập để nhận kết quả cũ hơn (ngày kể từ ngày nhập của người dùng) ví dụ: nếu người dùng trong 32 ngày sẽ nhận được kết quả không quá 30 ngày.bộ lọc django cũ hơn ngày?

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>] 

Vấn đề của tôi và cố gắng của tôi

xxxx__day__lte. 

đầu vào last_contact_filled khỏi trường nhập

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

cách tốt nhất để làm điều này trong Django là gì? để lọc theo ngày trong trường hợp của tôi?

Trả lời

53

Something như thế này sẽ làm việc cho bạn:

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

có nó hoạt động ... cảm ơn ... :) – kn3l

+3

Làm ngăn chặn lỗi thời gian gốc (RuntimeWarning: DateTimeField xxx.created_at nhận được một ngày giờ ngây thơ (2016-05-01 11: 31: 59.768065) ​​trong khi hỗ trợ múi giờ đang hoạt động) bạn nên nhập múi giờ djangos hiện hoạt động: từ django.utils.timezone nhập ngay bây giờ – gustavgans

3

Thêm timedelta(-30) vào datetime trong bộ lọc.

+0

không hiểu whant bạn muốn tôi để thêm, nơi để thêm? Ví dụ: – kn3l

+0

'datetime.now() + timedelta (-30)'. –

4

chúng ta có thể sử dụng Django timezone.now() với timedelta

from datetime import timedelta 
from django.utils import timezone 
time_threshold = timezone.now() - timedelta(days=7) 
Entry.objects.filter(entered__gte=time_threshold) 
Các vấn đề liên quan