为了账号安全,请及时绑定邮箱和手机立即绑定

RuntimeWarning:DateTimeField收到一个简单的日期时间

RuntimeWarning:DateTimeField收到一个简单的日期时间

拉丁的传说 2019-11-05 16:04:28
我正在尝试使用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),时区支持处于活动状态。运行时警告)已尝试:第一步是添加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 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

问题不在于Django设置,而在于传递给模型的日期。时区感知对象如下所示:


>>> 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。


查看完整回答
反对 回复 2019-11-05
?
千巷猫影

TA贡献1829条经验 获得超7个赞

使用django.utils.timezone.make_aware函数可让您的朴素日期时间对象意识到时区并避免这些警告。


它将天真的datetime对象(不带时区信息)转换为具有时区信息的对象(如果未将其明确指定为第二个参数,则使用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>


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 1152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信