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

Django Migrations:CharField与DateTimeField互转迁移报错如何解决?

错误原因

你克隆的生产环境数据库中,order_booking_time 字段当前为CharField类型,已存储了如2021-10-10 10.00这类用点分隔小时与分钟的字符串。待执行的0002_alter_userorder_order_booking_time迁移要将该字段转为DateTimeField,PostgreSQL在做类型转换时无法识别带点的时间格式,触发格式校验报错。

解决方案

根据你的业务需求选择对应方案即可:

  • 方案1:保留历史数据,修正格式后迁移
    先连接沙箱PostgreSQL数据库,执行SQL修正所有异常时间格式:
    UPDATE pro_auth_userorder 
    SET order_booking_time = REPLACE(order_booking_time, '.', ':')
    WHERE order_booking_time ~ '^\d{4}-\d{2}-\d{2} \d{2}\.\d{2}$';
    
    格式修正完成后,再执行迁移命令即可:
    python manage.py migrate
    
  • 方案2:不需要保留该字段历史数据
    直接清空字段内容后执行迁移:
    UPDATE pro_auth_userorder SET order_booking_time = NULL;
    
    再运行python manage.py migrate即可。
  • 方案3:已确认最终要把字段改回CharField,无需执行本次转DateTime的中间迁移
    直接标记该迁移为已执行,跳过本次操作:
    python manage.py migrate --fake pro_auth 0002
    
    注意:该操作仅适用于当前数据库表结构和迁移预期结构一致的场景,避免后续迁移出现结构不一致问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:03