2009-12-31 13 views
21

Der Tag ist die Nummer, die der Benutzer eingeben wird, um das Ergebnis zu erhalten, das älter ist als (Tage von der Benutzereingabe) zum Beispiel, wenn Benutzer 32 Tage die Ergebnisse erhalten, die 30 Tage oder länger sind.Django-Filter älter als Tag (e)?

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

Mein Problem und mein Versuch

xxxx__day__lte. 

last_contact_filled Eingabe von Eingabefeld

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

Was ist der beste Weg, dies in Django zu tun? für Filter nach Tag (e) in meinem Fall?

Antwort

53

So etwas wäre für Sie arbeiten:

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

ja es funktioniert ... danke ... :) – kn3l

+3

Verhindern Sie den systemeigenen Zeitfehler (RuntimeWarning: DateTimeField xxx.created_at erhielt eine naive Datetime (2016-05-01 11: 31: 59.768065) ​​während Zeitzone Unterstützung aktiv ist) sollten Sie Djangos Zeitzone jetzt Funktion importieren: von django.utils.timezone jetzt importieren – gustavgans

3

Fügen Sie einen timedelta(-30) zum datetime im Filter hinzu.

+0

nicht verstehen whant Sie mich hinzufügen möchten, wo man hinzufügen? – kn3l

+0

'datetime.now() + timedelta (-30)', zum Beispiel. –

4

wir verwenden können Django timezone.now() mit Timedelta

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