2016-06-17 14 views
2

Ich versuche, eine Abfrage zu erstellen, um mir alle Einträge beginnend 24 Stunden in der Vergangenheit, aber nicht mehr als 25 Stunden in der Vergangenheit.Filter Abfrage mit relativen Stundenbereich

Also, wenn das Datum und die Uhrzeit die Abfrage ausgeführt wird, ist 06.17.2016 15:00 ich jeden Eintrag mit einem Startdatum zwischen 06.16.2016 15:00 und 06.16.2016 15:59

versucht, mit __range finden will, aber es scheint, als ob es nicht Stunden mit nicht funktioniert. Ist es sogar möglich, dies mit .filter() zu tun?

Hier ist mein Code:

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

-

start = timezone.now().date() - relativedelta(hours=+24) 
end = timezone.now().date() - relativedelta(hours=+25) 

list = Entry.objects.filter(startdate__gte=start, startdate__lte=end) 

Edit:

Liste gibt einen leeren queryset.

Edit 2:

scheint ein Problem zu sein whith relativedelta

start = timezone.now().date() - relativedelta(hours=+24, seconds=+1) mich gibt datetime.datetime(2016, 6, 16, 0, 59, 59)

end = timezone.now().date() - relativedelta(hours=+25, seconds=+1) gibt mir datetime.datetime(2016, 6, 15, 22, 59, 59)

reparieren müssen, wenn ich es will arbeiten , Ich vermute.

+0

Was ist los mit Ihrem Ansatz? –

+0

Nicht sicher, was könnte falsch sein, aber ich bekomme nur eine leere Abfrage, wenn ich es versuche. –

Antwort

2

Sie haben den falschen Bereich berechnet. Dein Start ist vor 24 Stunden, das Ende ist vor 25 Stunden, du solltest vor 25 Stunden starten und vor 24 Stunden enden.

start = timezone.now().date() - relativedelta(hours=+25) 
end = timezone.now().date() - relativedelta(hours=+24) 
list = Entry.objects.filter(startdate__gte=start, startdate__lte=end) 

Andere Dinge, die in Ihrem Code problematisch sind, sollten Sie mit timezone.now().date() nicht den Zeitbereich zu berechnen, da Ihr Feld DateTimeField ist und Sie mit Stunden zu tun haben, so date genug eindeutig nicht granular ist (auch wenn es ist immer noch eine Art Arbeits date() verwenden, aber das Konzept ist falsch):

start = timezone.now() - relativedelta(hours=+25) 
end = timezone.now() - relativedelta(hours=+24) 

bitte auch immer Zustand Ihr Problem deutlich in den Körper der Frage, wie Sie leere queryset mit waren, wird es andere machen ea sier zu beurteilen, welches Problem Sie haben.

+0

Vielen Dank! Arbeite jetzt! –