在我的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(不向南)
最佳答案
这是因为在PostgreSQL中,无法将time
转换(广播)为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 ]
Your query will look like, f.ex.:
ALTER TABLE "my_model"
ALTER COLUMN "column_name"
SET DATA TYPE TIMESTAMP WITH TIME ZONE USING 'yesterday'::date + "column_name"