5

在 Django 教程中,有一句话描述如下。

时区

...

当 USE_TZ 为 False 时,这是 Django 将存储所有日期时间的时区。当 USE_TZ 为 True 时,这是 Django 用于在模板中显示日期时间并解释在表单中输入的日期时间的默认时区。

...

当 django rest 框架从请求中获取天真的日期时间数据时。那么 Django 会解释这个幼稚的日期时间以了解 TIME_ZONE 设置的本地日期时间吗?如果它是正确的,它是如何工作的?

提前致谢!

4

2 回答 2

9

通常,输入时区在 DRF 中确定,同时在序列化DateTimeField程序中解析请求(类似于表单字段)。

您可以控制此类输入的格式,甚至还有一个DATETIME_INPUT_FORMATS默认设置为['iso-8601'].

这基本上意味着输入既可以省略也可以使用ISO-8601格式指定时区,并且该字段通常能够datetime根据您的 Django 设置确定是创建感知对象还是天真对象。

如果属性设置为 ,它将不会尝试将天真转换datetime为感知,如果timezoneNone属性None未设置,它也不会尝试将感知时区转换为天真。

该属性默认为TIME_ZONEifUSE_TZ为 True,否则为None; 并且也可以在字段初始化中显式覆盖。

注意: 有人应该向 DRF 发送 PR 来记录这种行为。

有关更多信息,请参阅Django 的时区文档

于 2016-07-15T12:38:50.570 回答
3

那么 Django 会解释这个幼稚的日期时间以了解 TIME_ZONE 设置的本地日期时间吗?

Django 在模板/表单级别使本地日期时间时区感知,因为模板/表单不用于 Django restframework 视图,Django 不会转换日期时间。

在 Django REST Framework 中,就像原版 Django 一样,您必须设置USE_TZTIME_ZONE激活时区设置,否则不会进行任何转换。

但是直到 v3.8.0(2018 年 5 月发布),Django REST Framework 只在解析阶段(json -> model)转换时区,而不是在渲染阶段(model -> json)。这让很多人感到困惑。

于 2018-10-16T08:33:17.927 回答