小编典典

Django:在models.py中将TimeField更改为DateTimeField

sql

在我的models.py中,我有一些具有这种属性的模型:

timestamp = models.TimeField(default=0)

我想将它们更改为:

timestamp = models.DateTimeField(default=0)

使用

python manage.py schemamigration app --auto

一审作品。但

python manage.py migrate app

导致此错误:

django.db.utils.ProgrammingError: column "timestamp" cannot be cast to type timestamp with time zone

所以我某种程度上需要使这种铸造成为可能。对于每个没有日期的时间,我想设置一个默认日期(例如昨天)。我怎样才能做到这一点?我只在SO上找到了,由于这个错误,它根本没有帮助。顺便说一句:我正在使用postgres和python3。

我感谢您的帮助!

如果这样更容易,我可以直接在数据库上使用SQL(不向南)


阅读 303

收藏
2021-04-07

共1个答案

小编典典

这是因为在PostgreSQL中time无法将其转换(广播)为timestamp(与时区无关的变体)。F.ex. 这也会失败:

SELECT 'now'::time::timestamp

在这些情况下,应在USING语句中使用该子句ALTER TABLE(如果可以直接对其进行编辑):

[更改表](http://www.postgresql.org/docs/current/static/sql-altertable.html)[如果存在] [仅] _ **名称**_ [*]
ALTER [COLUMN] _ **列名**_
[SET DATA] TYPE _**DATA_TYPE**_ [COLLATE _ **核对**_ ] [USING _ **表达**_ ]

您的查询将如下所示:

ALTER TABLE "my_model"
ALTER COLUMN "column_name"
SET DATA TYPE TIMESTAMP WITH TIME ZONE USING 'yesterday'::date + "column_name"
2021-04-07