3

我正在开发一个 Django 应用程序,我需要将所有 postgres 表示的日期时间字段保存在 UTC 中(应该如此)。当我使用 DateTime 字段创建模型时,它们的数据库表示会生成为“带时区的时间戳”。虽然我可以手动更改表以从字段中删除时区,但我想知道 DateTime 模型字段是否有能力不这样做 - 即,为某些字段创建“没有时区的时间戳”。那可能吗?还是我必须更改它们的表格?谢谢,哈雷尔

4

1 回答 1

4

Django 中 postgres 的数据类型映射到 string literal timestamp with time zone,并且似乎没有更改该类型的选项。

据我所知,您有三个选择:

  1. 利用 Django 的钩子在创建表语句之后执行原始 sql。为此,请sql在您的应用程序中创建一个名为的目录,并在该目录中创建一个名为mymodel.postgres_psycopg2.sql. 将您的 alter table 语句放在那里。

  2. 编写一个自定义字段来定义您认为合适的时间戳字段的修饰符。请参阅“编写自定义模型字段”。

  3. 保持 django 字段不变,并在您的应用程序中执行时区转换,以便您绝对确定您正在传递正确的时间。

我个人对数据完整性的偏好是#3。就像字符编码一样,你总是想确保你知道字符集并正确处理转换,我对属性(包括 TZ)尽可能精确定义的日期/时间感到更舒服。您今天可能确定您的所有输入都已在 UTC 中到达您的应用程序,但这可能会改变,特别是如果时间戳是由最终用户提供的。对于它的价值,我会加倍努力,将应用程序中的时间戳转换为 UTC,并将其以 UTC 作为时区存储在数据库中。

于 2009-12-08T20:17:59.267 回答