Django设置USE_TZ,TIME_ZONE和django rest framework

时间:2016-07-14 03:40:05

标签: django datetime django-rest-framework django-timezone

在Django教程中,有一个句子如下所述。

  

TIME_ZONE

     

...

     

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

     

...

当django rest框架从请求中获取天真的datetime数据时。那么Django会将这个天真的日期时间解释为知道TIME_ZONE设置的本地日期时间吗?如果它是对的,它是如何工作的?

提前致谢!

2 个答案:

答案 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_TZTIME_ZONE来激活时区设置,否则将不进行转换。

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