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

时间:2014-05-27 14:37:39

标签: python sql django postgresql

在我的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上找到了this,由于这个错误,它根本没有帮助。 顺便说一句:我使用的是postgres和python3。

感谢您的帮助!

我可以在数据库上使用SQL direct(没有南方),如果这样更容易

2 个答案:

答案 0 :(得分:7)

这是因为time无法在PostgreSQL中转换(转换)为timestamp(它们的时区相关变体)。 F.ex.这也将失败:

SELECT 'now'::time::timestamp

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

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
ALTER [ COLUMN ] column_name
[ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]

您的查询将如下所示:f.ex。:

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

答案 1 :(得分:2)

如果表中没有任何数据,则可以从应用程序的迁移文件夹中删除迁移,并将字段更改为DateTime,然后执行初始迁移。 我的问题解决了,没有触及SQL查询