简而言之,我试图向用户展示一个使用时区感知日期时间对象初始化的 DateTime 字段,允许他们对其进行编辑并将其发回。没有做任何特别的事情,我会收到一个关于非时区感知日期时间被返回到表单的 DateTime 字段的警告。
/django/db/models/fields/__init__.py:1474: RuntimeWarning:
DateTimeField MyModel.datetimefield received a naive datetime (2015-09-09 15:55:00)
while time zone support is active.
我从阅读django 时区文档开始。我安装了 pytz ( pip install pytz
) 并确保USE_TZ = True
已设置。
我正在使用django-easy-timezones,它根据请求者的 IP 设置“当前”时区并调用timezone.activate()
. 据我了解,TIME_ZONE
否则该设置将用作默认设置。我还在django-bootstrap3-datetimepicker
我的表单中使用了一个不错的小部件。
时区似乎没有与初始表单数据一起发送。相反,“当前”时区用于创建和发送一个简单的本地日期时间。据此,我收集该clean_[field]
方法旨在假设 POST 中返回的内容也在“当前”时区中。这是自动完成的还是我打算让数据时区自己知道?如果是这样,为什么我会收到警告?
简单地来回发送时区是否更有意义,始终具有时区感知日期时间?如果是这样,这里讨论了获取 javascript 的日期时间,但我还没有找到一种将它返回到 DateTime 字段格式的好方法(特别是在小部件不使用带时区的格式的情况下)。