2009-12-31 15 views
21

El día es el número que el usuario ingresará para obtener el resultado anterior a (días a partir de la entrada del usuario) por ejemplo, si el usuario obtiene 32 días los resultados que superan los 30 días.filtro django anterior a día (s)?

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

Mi problema y mi tratando

xxxx__day__lte. 

entrada last_contact_filled del campo de entrada

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

Cuál es la mejor manera de hacer esto en Django? para filtrar por día (s) en mi caso?

Respuesta

53

Algo como esto podría funcionar para usted:

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

sí funciona ... gracias ... :) – kn3l

+3

Evite el error de tiempo nativo (RuntimeWarning: DateTimeField xxx.created_at recibió una fecha de inicio ingenua (2016-05-01 11: 31: 59.768065) ​​mientras el soporte de zona horaria está activo) debe importar djangos huso horario ahora función: de django.utils.timezone importar ahora – gustavgans

3

Agregue timedelta(-30) al datetime en el filtro.

+0

no entiendo whant quieres que añadir, en donde agregar? – kn3l

+0

'datetime.now() + timedelta (-30)', por ejemplo. –

4

podemos usar Django timezone.now() con timedelta

from datetime import timedelta 
from django.utils import timezone 
time_threshold = timezone.now() - timedelta(days=7) 
Entry.objects.filter(entered__gte=time_threshold) 
Cuestiones relacionadas