关于django:PYTHON:运行时警告:DateTimeField在时区支持处于活动状态时收到了一个天真的日期时间。

PYTHON: RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. RuntimeWarning)

我正在使用一个API,它向我传递一个时间/日期字段,但它们不能保证其中始终包含时区信息。

从他们的文档中,此字段可以是:

1
2
3
4
Empty String,
YYYY-MM-DD,
YYYY-MM-DDTHH:MM:SS, or
YYYY-MM-DDTHH:MM:SS+TIMEZONE

当我试图将该字段保存到数据库中的模型中时,它会在数据没有时区信息的情况下生成此错误。将此值保存到的字段在其模型中定义为:

1
my_timedate_field = models.DateTimeField()

至少我希望禁止在保存每个记录时生成警告。我能做些什么来让这个更干净一点吗?

编辑:警告包括:

1
RuntimeWarning: DateTimeField my_timedate_field received a naive datetime while time zone support is active. RuntimeWarning)

每次我处理一个API调用时,这些警告都会出现在我的日志中——有时,根据元素的显示方式,每个API调用会出现5-10次。


我知道了。

结果是——假设我不能指望时区信息总是来自传入API的字符串的一部分——这是我能做的最好的。

通过使用Django模型声明:

1
api_time = models.DateTimeField()

发送的不包含时区信息的时间值仍然可以存储在该字段中。出现此警告的目的是让您知道正在将非时区字段保存在一个时区感知数据库字段中。

再次——这里是警告:

1
2
RuntimeWarning: DateTimeField api_time received a naive datetime
  (2018-08-03 09:04:25) while time zone support is active.