Django+PostgreSQL迁移报错:无法将time without time zone转为date
解决Django+PostgreSQL迁移时time without time zone转date报错问题
问题原因
你的Article模型中created_at和updated_at是DateTimeField,对应PostgreSQL的timestamp with time zone类型,但数据库中这两个字段实际是time without time zone类型,导致迁移时类型转换失败。
解决方法
情况1:项目刚启动,无重要数据
- 删除对应app下
migrations目录中除__init__.py外的所有迁移文件 - 登录PostgreSQL数据库,删除
article表:
(替换DROP TABLE your_app_article;your_app为你的实际app名称) - 重新生成并执行迁移:
python manage.py makemigrations python manage.py migrate
情况2:已有重要数据,不能删除表
- 先备份数据库,避免数据丢失
- 手动修改数据库字段类型为
timestamp with time zone:ALTER TABLE your_app_article ALTER COLUMN created_at TYPE TIMESTAMP WITH TIME ZONE; ALTER TABLE your_app_article ALTER COLUMN updated_at TYPE TIMESTAMP WITH TIME ZONE; - 执行迁移命令:
python manage.py migrate - 检查之前的迁移文件,若存在错误的字段类型定义,手动修正为对应
DateTimeField的正确配置。
模型优化建议
created_at和updated_at设置了auto_now_add=True和auto_now=True,这两个参数会自动赋值,无需额外添加blank=True和null=True,可以简化字段定义:
created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
内容的提问来源于stack exchange,提问作者Valentin Bocquet
相关产品推荐
相关产品推荐

