在Django教程中,有一个句子如下所述。
TIME_ZONE
...
当USE_TZ为False时,这是Django将存储的时区 所有日期时间。当USE_TZ为True时,这是默认时区 Django将用于在模板中显示日期时间并进行解释 在表格中输入的日期时间。
...
当django rest框架从请求中获取天真的datetime数据时。那么Django会将这个天真的日期时间解释为知道TIME_ZONE设置的本地日期时间吗?如果它是对的,它是如何工作的?
提前致谢!
答案 0 :(得分:4)
通常,在serializer's DateTimeField
中解析请求时,在DRF中确定输入时区(类似于表单字段)。
您可以控制此类输入的格式,甚至还有一般设置DATETIME_INPUT_FORMATS
,默认为['iso-8601']
。
这基本上意味着根据您的Django设置,输入可以使用ISO-8601格式和the field will generally be able to determine whether to create an aware or naive datetime
object省略和指定时区。
如果datetime
属性设置为timezone
,则不会尝试将天真None
转换为知晓,也不会尝试转换感知时区天真的如果属性不是None
。
如果TIME_ZONE
为True,则属性默认为USE_TZ
,否则为None
;并且也可以在字段初始化中明确地重写。
注意: 有人应该向DRF发送PR以记录此行为。
有关详细信息,请参阅Django's time zone documentation
答案 1 :(得分:0)
然后Django将解释此朴素的日期时间以感知本地日期时间 TIME_ZONE设置?
Django可以在模板/表单级别识别本地日期时间时区,因为Django restframework视图中未使用模板/表单,因此Django不会转换日期时间。
在Django REST Framework中,例如香草Django,您必须设置USE_TZ
和TIME_ZONE
来激活时区设置,否则将不进行转换。
但是,直到v3.8.0(2018年5月发布),Django REST Framework仅在解析阶段(json-> model)而不是在渲染阶段(model-> json)转换时区。那使很多人感到困惑。