You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:已有重要数据,不能删除表

  1. 先备份数据库,避免数据丢失
  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;
    
  3. 执行迁移命令:
    python manage.py migrate
    
  4. 检查之前的迁移文件,若存在错误的字段类型定义,手动修正为对应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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:09:09