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

Django执行makemigrations和migrate无报错但数据库未创建duration字段

Django迁移执行无报错但字段未创建的解决方案

核心原因大概率是迁移状态与数据库实际结构不匹配、app未注册导致迁移未扫描到模型变更,或--fake命令滥用引发的状态异常,可按以下步骤排查修复:

前置排查

  • 确认项目settings.py的INSTALLED_APPS列表中已经注册了Services模型所属的app,未注册的app不会被Django迁移系统扫描
  • 确认运行迁移命令的环境,和启动API服务的环境连接的是同一个数据库,避免跨环境迁移不同步的问题

重置迁移状态并重新执行

  1. 登录项目使用的数据库,找到django_migrations系统表,删除所有app字段值为你对应app名称的记录(例如Services模型在名为service_list的app下,就删除所有app = 'service_list'的行)
  2. 进入对应app的目录,打开migrations文件夹,保留__init__.py文件,删除其他所有迁移文件
  3. 执行生成迁移命令,注意指定app名称:
    python manage.py makemigrations <替换为你的app名称>
    执行完成后打开新生成的迁移文件,确认里面存在添加duration字段的逻辑,避免迁移生成异常
  4. 执行正常迁移命令,不要加--fake参数:
    python manage.py migrate <替换为你的app名称>
    执行完成后直接检查数据库的service_list_services表,即可看到duration字段已经创建完成

注意事项

  • 不要随意使用--fake参数,该参数只会将迁移标记为已执行,不会实际修改数据库结构,滥用会导致迁移状态和数据库结构完全不匹配
  • 每次修改模型后生成迁移时,建议指定对应app名称,避免全局扫描遗漏变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:57:02