所以我对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数据库中的列吗?
答案 0 :(得分:1)
请参见section of the timezone documentation,专门针对PostgreSQL:
PostgreSQL后端将日期时间存储为
timestamp with time zone
。实际上,这意味着它将存储中的日期时间从连接的时区转换为UTC,在检索时将其从UTC转换为连接的时区。因此,如果您使用的是PostgreSQL,则可以在
USE_TZ = False
和USE_TZ = True
之间自由切换。数据库连接的时区将分别设置为TIME_ZONE
或UTC
,以便Django在所有情况下都能获取正确的日期时间。您无需执行任何数据转换。
这回答了您有关列类型为何未更改的特定问题。目前尚不清楚这实际上为您带来什么问题,因此很难提供进一步的建议。如果您尝试在Django之外更改列的类型,那么我将不会期望正确的行为。