2016-11-21 5 views
1

Ich habe festgestellt, dass, wenn ich Datensätze aus meiner SQL-Datenbank mit den folgenden zurücksenden: the_records = records.objects.filter(datetime__contains="2015-01-15"), bekomme ich die falschen Datensätze zurück, weil die Zeitzone den Funktionsaufruf irgendwie beeinflusst - ich weiß das, wenn ich vorübergehend Deaktivieren Sie die Zeitzone, die richtigen Datensätze werden zurückgegeben. Kann jemand Hilfe anbieten, was ich tun sollte, um dieses Problem zu beheben (ich muss immer noch die Zeitzone verwenden).SQL where Klausel und Django Zeitzone

Grüße, Mark

Antwort

1

Ich gehe davon aus, dass datetime ein DateTime Feld Django ist, und Sie versuchen, die Ergebnisse zu erhalten, die einen Wert haben, der das Datum übereinstimmt ‚2015.01.15‘, das zu ignorieren genaue Uhrzeit.

In diesem Fall möchten Sie wahrscheinlich eine date Abfrage tun, wie: Records.objects.filter(datetime__date=datetime.date(2015, 1, 15))

+0

Danke, das hat das Problem für mich gelöst. – beliskna

0

Wenn Sie Ihre db mit einer Zeitzone bestimmten Datum abgefragt werden müssen, können Sie nur ein Datetime-Objekt erstellen, das es zu wissen ist die Zeitzone .

Beispiel:

# Get your timezone 
from django.utils import timezone 
my_timezone = timezone.get_current_timezone() 


# Get create your timezone aware datetime object 
from datetime import datetime 
query_date = datetime(2015,01,15).replace(tzinfo=my_timezone) 


# now you can run your query with a timezone specific datetime object 
the_records = records.objects.filter(datetime=query_date) 

Dies sollte Ihr Problem lösen und Ihnen die genauen Ergebnisse erhalten Sie benötigen. Bitte lassen Sie mich wissen, wenn Sie noch Fragen haben.

Diese link hat mehr Informationen zu Django Zeitzonen, wenn Sie daran interessiert sind, mehr zu erfahren.

+0

Danke Patrick, aber dieser Code gibt mir nicht das Datum, und wenn ich nur das Datum Teil extrahiere und das zum Filtern meiner Datensätze verwende, bekomme ich immer noch die falschen Datensätze zurück. – beliskna