我正在开发一个Django应用程序,我需要将所有postgres表示的datetime字段保存为UTC(他们应该这样做)。当我使用DateTime字段创建模型时,它们的数据库表示将生成为“带时区的时间戳”。 虽然我可以手动更改表格以从字段中删除时区,但我想知道DateTime模型字段是否有能力不这样做 - 即,为某些人创建“带时区的时间戳”领域。 那可能吗?或者我是否必须更改它们? 谢谢, Harel的
答案 0 :(得分:4)
Django中postgres的数据类型映射到字符串文字timestamp with time zone
,并且似乎没有更改该类型的选项。
据我所知,您有三种选择:
利用Django的钩子来执行raw sql after the create table statement。为此,请在应用程序中创建名为sql
的目录,并在该目录中创建名为mymodel.postgres_psycopg2.sql
的文件。将alter table语句放在那里。
编写自定义字段,以根据需要定义时间戳字段的修饰符。请参阅“writing custom model fields”。
按原样保留django字段,并在您的应用程序中执行时区转换,以确保您正在通过正确的时间。
我个人对数据完整性的偏好是#3。就像字符编码一样,你总是希望确定你知道字符集并且正确处理转换,我觉得日期/时间更加舒适,其属性(包括TZ)尽可能精确定义。您今天可能确定您的所有输入都已经以UTC格式进入您的应用,但可能会发生变化,特别是如果时间戳由最终用户提供。为了它的价值,我会更加努力,将应用程序中的时间戳转换为UTC,并将其存储在以UTC为时区的数据库中。