2016-04-01 3 views
0

ich eine Spalte, die als solche in einem meiner Modelle formatiert:Django Queryset für Datum und Uhrzeit Filter

TEMP_START = models.DateTimeField(null=True) 

Und ich bin versucht, eine genaue Lookup über queryset Syntax wie

x.filter(TEMP_START=my_datetime_object) # x can be thought of as y.objects.all() 

Diese kehrt zu tun keine Objekte, wenn es mehr als eins tun sollte.

x.filter(TEMP_START__date=my_datetime_object.date()).filter(TEMP_START__hour=my_datetime_object.hour) 

Gibt die richtigen Objekte zurück (sie sind stündlich). Werden direkte Datetime-Filter nicht unterstützt und müssen daher Schlüsselwörter verwendet werden?

====== Bearbeiten mit schlechten Ergebnissen:

Searching for: {'TEMP_START': datetime.datetime(2016, 3, 31, 2, 0)} 

Values in column: [{'TEMP_START': datetime.datetime(2016, 3, 29, 8, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 29, 14, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 2, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 29, 20, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 8, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 20, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 31, 2, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 14, 0)}] 

Values being returned: [] 


Code: 
    args_timeframe_start = {variables.temp_start: self.ranked_timeframes[rank][variables.temp_start]} 
    print(args_timeframe_start) 
    print(self.query_data.values(variables.temp_start).distinct()) 
    query_data = self.query_data.filter(**args_timeframe_start) 
    print(query_data.values(variables.temp_start).distinct()) 
+0

genau Bitte zeigen Sie, was Sie tun, anstatt Füllgrad mit wie 'my_datetime_object'. Es wird hilfreicher für uns zu sehen, wie Sie tatsächlich Dinge tun und woher die Variablen kommen. – rnevius

+0

Haben 'TEMP_START' und' my_datetime_object' genau dieselben Werte? – v1k45

+0

Beachten Sie auch, dass "genau das gleiche" Stunden, Minuten, Sekunden, Millisekunden und Zeitzone enthalten sollte ... –

Antwort

1

Sie müssen herausfinden, was my_datetime_object ist aber sehr wahrscheinlich, weil Datetime Felder Python datetime.datetime Objekte enthalten, wird datetime.datetime Objekte des Jahres zusammengesetzt, Monat, Datum, Stunde, Minute, Sekunde, Mikrosekunde. Wenn Sie also nur date und hour vergleichen, können Sie sicher Ergebnisse erhalten, aber Sie können nicht garantieren, dass my_datetime_object mit einem der Datensätze in Ihrer Datenbank übereinstimmt, der die gleiche Minute, Sekunde und Mikrosekunde hat.

dies schnell Versuchen und man konnte sehen, was Datetime sieht wie auch django doc über DateTimeField:

from datetime import datetime 
date = datetime.now() 
print date 
+0

Alle anderen Felder sind Null und haben keine Zeitzone (auf jedem Objekt) – um8ra

+0

Wie hast du 'my_datetime_object' bekommen? –

+0

TEMP_START = models.DateTimeField (null = True). Im Wesentlichen richte ich die Datumswerte ein und schaue das n-te Objekt basierend auf Benutzereingaben nach. Wenn ich also sage, dass das Objekt im Feld des Modells ist. Es ist garantiert. Da kam es her. – um8ra