Django:USE_TZ = False不更新Postgres数据库设置

时间:2019-03-10 05:01:04

标签: django postgresql django-timezone

所以我对Django中的Use_Tz感到困惑。

首次启动项目时,USE_TZ设置为True,我们还将USE_I18N设置为True。

但是,上周决定将这些设置设置为False。根据文档here,Postgresql应该能够根据settings.py文件自动在True和False之间切换。

但是,我表中的日期时间字段最后显示的时区标记为+01。

此外,当我使用命令\d survey_server_app_activitylog直接进入数据库时​​,会看到以下内容:

 date_reg       | timestamp with time zone |           

所有带日期时间的字段都显示相同的条目。但是,我认为应将它们 设置为timestamp without time zone

那么,有什么用呢?我是否完全错误地解释了USE_TZ = False?我需要手动设置postgres数据库中的列吗?

1 个答案:

答案 0 :(得分:1)

请参见section of the timezone documentation,专门针对PostgreSQL:

  

PostgreSQL后端将日期时间存储为timestamp with time zone。实际上,这意味着它将存储中的日期时间从连接的时区转换为UTC,在检索时将其从UTC转换为连接的时区。

     

因此,如果您使用的是PostgreSQL,则可以在USE_TZ = FalseUSE_TZ = True之间自由切换。数据库连接的时区将分别设置为TIME_ZONEUTC,以便Django在所有情况下都能获取正确的日期时间。您无需执行任何数据转换。

这回答了您有关列类型为何未更改的特定问题。目前尚不清楚这实际上为您带来什么问题,因此很难提供进一步的建议。如果您尝试在Django之外更改列的类型,那么我将不会期望正确的行为。