2013-09-04 5 views
167

Я пытаюсь отправить простую почту с помощью IPython. Я не настроил какие-либо модели, все еще получая эту ошибку. Что может быть сделано?RuntimeWarning: DateTimeField получил наивное datetime

Ошибка: /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)[email protected]:~/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) 

ответ

292

Проблема не в настройках Django, но в дату перешла к модели. Вот как часовой пояс-Aware объект выглядит следующим образом:

>>> from django.utils import timezone 
>>> import pytz 
>>> timezone.now() 
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC) 

А вот наивная объект:

>>> from datetime import datetime 
>>> datetime.now() 
datetime.datetime(2013, 11, 20, 20, 9, 26, 423063) 

Так что, если вы передаете дату по электронной почте в любом месте (и это в конце концов попадает в какой-то модели), просто использовать Django's now(). Если нет, то это, вероятно, проблема с существующим пакетом, который выбирает дату без часовой пояс, и вы можете исправить пакет, проигнорировать предупреждение или установить USE_TZ в False.

+14

спасибо, решена моя 100-летняя проблема! – doniyor

+5

Где вы пишете 'tzinfo = ', что такое ''? Это не синтаксическая конструкция, которую я видел. – jameshfisher

+3

Немного поздно на вечеринку, но то, что вы видите, - ** выход ** из оболочки. Более конкретно, это результат метода __repr__ объекта datetime, который возвращает информацию для печати объекта. –

12

вот документ о проблеме вы столкнулись Time Zone and fixtures

+1

я просмотрел их не помогает с моей проблемой. :( – shifu

+1

для поры до времени я поставил USE_TZ = False. Спасибо в любом случае :) – shifu

+2

Хотя это ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18592115) – Pablo

9

Используйте функцию django.utils.timezone.make_aware, чтобы сделать свои наивные объекты времени и времени часовыми поясами и избегать этих предупреждений.

0

Просто, чтобы исправить ошибку, чтобы установить текущее время

from django.utils import timezone 
import datetime 

datetime.datetime.now(tz=timezone.utc) # you can use this value