Django:在models.py中将TimeField改为DateTimeField
在我的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
所以我需要想办法让这个转换变得可行。每当没有日期的时候,我想设置一个默认日期(比如昨天)。我该怎么做呢? 我只在网上找到了这个,但因为那个错误,它根本没有帮助。 顺便说一下:我正在使用Postgres和Python3。
谢谢你的帮助!
如果直接在数据库上用SQL(不使用south)更简单,我也可以接受。
2 个回答
5
如果你的表里没有任何数据,那么你可以直接删除应用程序中的迁移文件夹里的迁移文件,然后把字段改成日期时间类型,接着再进行初始迁移。这样我的问题就解决了,而且没有动到任何SQL查询。
12
这是因为在PostgreSQL中,time
类型不能直接转换成timestamp
类型(包括它们的时区相关变种)。例如,下面的操作也会失败:
SELECT 'now'::time::timestamp
在这种情况下,如果你可以直接编辑表格,你应该在你的ALTER TABLE
语句中使用USING
子句:
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
你的查询可能看起来像这样,例如:
ALTER TABLE "my_model"
ALTER COLUMN "column_name"
SET DATA TYPE TIMESTAMP WITH TIME ZONE USING 'yesterday'::date + "column_name"