Я пытаюсь отправить простую почту, используя IPython. Я не настроил ни одной модели, все еще получающей эту ошибку. Что может быть сделано?
Ошибка: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/ init .py: 827: RuntimeWarning: DateTimeField получил наивное datetime (2013-09-04 14: 14: 13.698105) при активной поддержке часового пояса. RuntimeWarning)
Попробовал: первый шаг - добавить USE_TZ = True
в файл настроек и установить pytz
(если это возможно).
Ошибка изменена:
(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)
источник
tzinfo=<UTC>
, что есть<UTC>
? Это не синтаксическая конструкция, которую я видел.datetime.now
, измените его наtimezone.now
и добавьтеfrom django.utils import timezone
сверху.import pytz
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)
USE_TZ = True
,TIME_ZONE = 'UTC'
. Но когда я используюtimezone.now()
его, он не отображаетсяtzinfo=<UTC>
.... Так что этот объект даты и времени передается как наивный. Почему это происходит?Используйте функцию django.utils.timezone.make_aware, чтобы ваши наивные объекты даты и времени знали часовой пояс и избегали этих предупреждений.
Он преобразует наивный объект datetime (без информации о часовом поясе) в объект с информацией о часовом поясе (используя часовой пояс, указанный в настройках django, если вы явно не указали его в качестве второго аргумента):
источник
auto_now
иauto_now_add
он отлично подойдет для полей даты и времени. Если вам по какой-то причине необходимо знать текущую дату и время в моделях в часовом поясе - используйтеdjango.utils.timezone.now()
функцию.Просто чтобы исправить ошибку, чтобы установить текущее время
источник
Можно как исправить предупреждение, так и использовать часовой пояс, указанный в settings.py, который может отличаться от UTC.
Например в моем settings.py у меня есть:
Вот решение; преимущество в том, что
str(mydate)
дает правильное время:Другой эквивалентный метод использует
make_aware
, см. Сообщение dmrz.источник
Быстро и грязно - выключите его:
в твоем
settings.py
источник
Вы также можете переопределить настройки, особенно полезные в тестах:
Это помешает вам увидеть предупреждение, в то же время все, что в вашем коде требует указание даты и времени в часовом поясе, может вызвать проблемы. Если это так, смотрите ответ Кравец.
источник
Если вы пытаетесь преобразовать наивную дату и время в часовой пояс в django, вот мое решение:
t1 - наивное время даты, а t2 - дата и время с часовым поясом в настройках django.
источник