RuntimeWarning:DateTimeField收到一个天真的日期时间

我试图使用IPython发送一个简单的邮件 . 我还没有设置任何模型仍然出现此错误 . 可以做些什么?

错误:/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/init.py:827:RuntimeWarning:DateTimeField收到一个天真的日期时间(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)

回答(3)

2 years ago

问题不在Django设置中,而是在传递给模型的_749002中 . 以下是时区感知对象的外观:

>>> 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的 now() . 如果没有,那么现有的包可能是一个问题,它在没有时区的情况下获取日期,您可以修改包,忽略警告或将USE_TZ设置为False .

2 years ago

使用django.utils.timezone.make_aware函数可以使您的天真日期时间对象感知时区并避免这些警告 .

它将天真的日期时间对象(没有时区信息)转换为具有时区信息的对象(使用django设置中指定的时区,如果未将其明确指定为第二个参数):

import datetime
from django.conf import settings
from django.utils.timezone import make_aware

naive_datetime = datetime.datetime.now()
naive_datetime.tzinfo  # None

settings.TIME_ZONE  # 'UTC'
aware_datetime = make_aware(naive_datetime)
aware_datetime.tzinfo  # <UTC>

2 years ago

只是为了修复错误来设置当前时间

from django.utils import timezone
import datetime

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