Próbuję wysłać zwykłą pocztę za pomocą IPython. Nie skonfigurowałem żadnych modeli, w których nadal występuje ten błąd. Co można zrobić?
Błąd: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField otrzymał naiwny datetime (2013-09-04 14: 14: 13.698105), gdy obsługa strefy czasowej jest aktywna. RuntimeWarning)
Wypróbowano: pierwszym krokiem jest dodanie USE_TZ = True
do pliku ustawień i instalacja pytz
(jeśli to możliwe).
Błąd zmieniony:
(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)
źródło
tzinfo=<UTC>
, co jest<UTC>
? Nie widziałem tego konstruktu składniowego.datetime.now
, zmień gotimezone.now
i dodajfrom django.utils import timezone
u góry.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Ale kiedytimezone.now()
go używam , nie pokazujetzinfo=<UTC>
... Więc ten obiekt datetime jest przekazywany jako naiwny. Dlaczego tak się dzieje?Użyj funkcji django.utils.timezone.make_aware, aby uświadomić strefę czasową naiwnych obiektów datetime i uniknąć ostrzeżeń.
Konwertuje naiwny obiekt datetime (bez informacji o strefie czasowej) na ten, który ma informacje o strefie czasowej (używając strefy czasowej określonej w ustawieniach django, jeśli nie określisz jej jawnie jako drugiego argumentu):
źródło
auto_now
iauto_now_add
będzie działać poprawnie dla pól datetime. Jeśli z jakiegoś powodu potrzebujesz mieć w strefie model aktualnego obiektu daty / godziny w modelach - użyjdjango.utils.timezone.now()
funkcji.Aby naprawić błąd i ustawić aktualny czas
źródło
Można zarówno naprawić ostrzeżenie, jak i użyć strefy czasowej określonej w pliku settings.py, która może być inna niż UTC.
Na przykład w moim settings.py mam:
Oto rozwiązanie; zaletą jest to, że
str(mydate)
daje właściwy czas:make_aware
Używa się innej równoważnej metody , patrz post dmrz.źródło
Szybko i brudno - wyłącz:
w Twoim
settings.py
źródło
Możesz także zastąpić ustawienia, szczególnie przydatne w testach:
Zapobiegnie to wyświetleniu ostrzeżenia, a jednocześnie wszystko w kodzie, które wymaga strefy czasowej uwzględniającej strefę czasową, może powodować problemy. Jeśli tak jest, patrz odpowiedź Kravietza.
źródło
Jeśli próbujesz przekształcić naiwny datetime w datetime ze strefą czasową w django, oto moje rozwiązanie:
t1 to naiwna data i godzina t2 to data i strefa czasowa w ustawieniach django.
źródło