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

PostgreSQL环境下Django添加字段后migrate报错:列不存在

解决Django添加字段后migrate报错的问题

核心问题分析

回滚迁移后数据库中无track_code字段,但模型类仍保留该字段,导致Django运行时尝试查询不存在的列;同时可能存在迁移记录与实际文件不同步的情况。

分步解决办法

1. 临时注释模型中的新字段

打开Ticket模型所在文件,注释掉新增的字段代码:

# track_code = models.CharField(max_length=32, verbose_name=_('کد رهگیری'), default=generate_rrr_unique_trackcode)

2. 同步迁移状态

执行命令确保数据库与旧迁移版本完全对齐:

python3 manage.py migrate app_name 0001
python3 manage.py makemigrations --dry-run app_name

若--dry-run未提示生成新迁移,说明当前模型与0001迁移状态一致。

3. 清理迁移表残留记录

通过PostgreSQL命令行连接数据库,检查并清理多余迁移记录:

-- 查看app_name的迁移记录
SELECT * FROM django_migrations WHERE app = 'app_name';

-- 删除0001之后的记录(如果存在)
DELETE FROM django_migrations WHERE app = 'app_name' AND name > '0001_initial';

4. 重新生成并执行迁移

取消模型中track_code字段的注释,生成新迁移文件:

python3 manage.py makemigrations app_name

打开生成的迁移文件,确认字段添加逻辑无误后执行迁移:

python3 manage.py migrate app_name

额外注意事项

  • 确保generate_rrr_unique_trackcode函数不依赖track_code字段本身,需用独立逻辑生成唯一值(如UUID、随机字符串),避免迁移时因字段未创建报错。
  • 若仍有问题,可尝试先执行python3 manage.py migrate --fake app_name 0001,再重新生成迁移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:35:28