Django执行makemigrations和migrate无报错但数据库未创建duration字段
Django迁移执行无报错但字段未创建的解决方案
核心原因大概率是迁移状态与数据库实际结构不匹配、app未注册导致迁移未扫描到模型变更,或--fake命令滥用引发的状态异常,可按以下步骤排查修复:
前置排查
- 确认项目
settings.py的INSTALLED_APPS列表中已经注册了Services模型所属的app,未注册的app不会被Django迁移系统扫描 - 确认运行迁移命令的环境,和启动API服务的环境连接的是同一个数据库,避免跨环境迁移不同步的问题
重置迁移状态并重新执行
- 登录项目使用的数据库,找到
django_migrations系统表,删除所有app字段值为你对应app名称的记录(例如Services模型在名为service_list的app下,就删除所有app = 'service_list'的行) - 进入对应app的目录,打开
migrations文件夹,保留__init__.py文件,删除其他所有迁移文件 - 执行生成迁移命令,注意指定app名称:
python manage.py makemigrations <替换为你的app名称>
执行完成后打开新生成的迁移文件,确认里面存在添加duration字段的逻辑,避免迁移生成异常 - 执行正常迁移命令,不要加
--fake参数:python manage.py migrate <替换为你的app名称>
执行完成后直接检查数据库的service_list_services表,即可看到duration字段已经创建完成
注意事项
- 不要随意使用
--fake参数,该参数只会将迁移标记为已执行,不会实际修改数据库结构,滥用会导致迁移状态和数据库结构完全不匹配 - 每次修改模型后生成迁移时,建议指定对应app名称,避免全局扫描遗漏变更
内容的提问来源于stack exchange,提问作者Ajay Chaurasia
相关产品推荐
相关产品推荐

