Ich versuche, eine einfache Mail mit IPython zu senden. Ich habe keine Modelle eingerichtet, bei denen dieser Fehler noch auftritt. Was kann getan werden?
Fehler: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField hat eine naive Datumszeit erhalten (2013-09-04 14: 14: 13.698105), während die Zeitzonenunterstützung aktiv ist. RuntimeWarning)
Versucht: Der erste Schritt besteht darin USE_TZ = True
, Ihre Einstellungsdatei hinzuzufügen und zu installieren pytz
(falls möglich).
Fehler geändert:
(learn)sourabh@sL:~/Django/learn/event$ python manage.py shell
/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:53: RuntimeWarning: SQLite received a naive datetime (2013-09-05 00:59:32.181872) while time zone support is active.
RuntimeWarning)
quelle
tzinfo=<UTC>
, was ist<UTC>
? Das ist kein syntaktisches Konstrukt, das ich gesehen habe.datetime.now
Ändern Sie es an den Stellen, an denen Sie es verwendet haben , intimezone.now
und fügen Sie esfrom django.utils import timezone
oben hinzu.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Aber wenn ich es benutze, wirdtimezone.now()
es nichttzinfo=<UTC>
angezeigt ... Also wird dieses Datum / Uhrzeit-Objekt als naiv übergeben. Warum passiert das?Verwenden Sie die Funktion django.utils.timezone.make_aware , um Ihre naiven Datetime-Objekte auf die Zeitzone aufmerksam zu machen und diese Warnungen zu vermeiden.
Es konvertiert ein naives Datum / Uhrzeit-Objekt (ohne Zeitzoneninformationen) in ein Objekt mit Zeitzoneninformationen (unter Verwendung der in Ihren Django-Einstellungen angegebenen Zeitzone, wenn Sie diese nicht explizit als zweites Argument angeben):
quelle
auto_now
undauto_now_add
werden für Datetime - Felder funktionieren. Wenn Sie aus irgendeinem Grund ein zeitzonenbewusstes aktuelles Datum / Uhrzeit-Objekt in Modellen benötigen, verwenden Sie diedjango.utils.timezone.now()
Funktion.Nur um den Fehler zu beheben, um die aktuelle Zeit einzustellen
quelle
Man kann sowohl fix die Warnung und verwenden Sie die Zeitzone in settings.py angegeben, die von UTC unterschiedlich sein könnten.
Zum Beispiel in meiner settings.py habe ich:
Hier ist eine Lösung; Der Vorteil ist, dass
str(mydate)
die richtige Zeit angegeben wird:Eine andere äquivalente Methode ist die Verwendung
make_aware
, siehe dmrz post.quelle
Schnell und schmutzig - Schalten Sie es aus:
in deinem
settings.py
quelle
Sie können auch Einstellungen überschreiben, die besonders bei Tests nützlich sind:
Dies verhindert, dass Sie die Warnung sehen. Gleichzeitig kann alles in Ihrem Code, das eine zeitzonenbezogene Datums- / Uhrzeitangabe erfordert, zu Problemen führen. Wenn dies der Fall ist, siehe kravietz Antwort.
quelle
Wenn Sie versuchen, eine naive Datumszeit in eine Datumszeit mit Zeitzone in Django umzuwandeln, ist hier meine Lösung:
t1 ist eine naive Datumszeit und t2 ist eine Datumszeit mit Zeitzone in den Einstellungen von Django.
quelle