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

Django部署Heroku执行migrate时报date无法转无时区time类型错误

错误根因

该报错和settings.py中的TIME_ZONE配置没有关联,核心是Heroku默认使用的PostgreSQL数据库不支持date类型到time without time zone类型的直接强制转换:你之前的order表creation_date字段为DateField类型,对应数据库的date格式,本次迁移要将其修改为TimeField类型,对应数据库的time without time zone格式,超出了数据库默认的字段转换能力范围,因此触发报错。

解决方案

根据线上是否已有需要保留的生产数据,可选择对应修复方案:

方案1:线上无有效生产数据(可清空字段内容)

该方案操作成本最低,步骤如下:

  • 删除当前触发报错的迁移文件
  • 如果你实际需要存储「日期+时间」的完整信息,建议优先将模型字段调整为DateTimeField(TimeField仅能存储时分秒,不包含日期信息):
creation_date = models.DateTimeField(default=django.utils.timezone.now, verbose_name='Data Ordine')
  • 本地重新生成迁移文件:python manage.py makemigrations
  • 提交代码推送到Heroku后,重新执行迁移命令即可:python manage.py migrate

方案2:线上有生产数据不可清空

需要将单次字段类型修改的操作拆分为3个迁移步骤,绕过数据库的类型转换限制:

  1. 在order模型中新增临时时间字段,例如temp_creation_time = models.TimeField(default=django.utils.timezone.now, verbose_name='临时时间'),执行python manage.py makemigrations生成第一个迁移文件
  2. 创建自定义数据迁移,将原有creation_date字段中需要保留的时间信息同步到新增的临时字段中
  3. 删除原creation_date字段,再将temp_creation_time字段重命名为creation_date,执行python manage.py makemigrations生成第三个迁移文件
    将三个迁移文件按顺序提交推送到Heroku,依次执行迁移即可解决报错。

内容的提问来源于stack exchange,提问作者Enrico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:18:03