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

Django执行迁移后所有migrations重复、冲突报错解决方法

问题根因

这个冲突不是自定义应用的迁移写错了,也不是数据库的问题——你看到的所有带2后缀的重复迁移条目,都是Django扫描迁移文件时,把内置的django.contrib系列应用(admin/auth/contenttypes/sessions)的同一套迁移文件重复加载了两次导致的。
出现重复加载基本是两类配置错误:

  • settings.py里的INSTALLED_APPS列表重复注册了上述内置contrib应用,同一个app被Django初始化了两次
  • Python模块搜索路径配置异常,Django的安装目录被重复加入搜索路径,或者项目目录下存在和内置contrib应用重名的模块/文件夹,导致迁移扫描时同一批文件被识别了两次
    这也是为什么你删掉自己项目的迁移文件、清空数据库完全解决不了问题——冲突的根本来源是Django内置应用的迁移被重复读取,和项目本身的业务文件没关系。
修复步骤

别直接跑报错里提示的python manage.py makemigrations --merge,这个命令是用来解决多分支开发产生的正常迁移分叉的,对这种重复加载导致的假冲突没用,反而会生成多余的垃圾迁移文件。按下面顺序操作即可:

  1. 打开项目的settings.py,逐行检查INSTALLED_APPS配置,确保django.contrib.admin、django.contrib.auth、django.contrib.contenttypes、django.contrib.sessions这几个内置应用每个只出现一次,删掉重复的条目。
  2. 排查路径重复问题:
    • 在激活虚拟环境的终端执行python -c "import django; print(django.__path__)",拿到Django包的实际安装位置
    • 检查项目根目录、所有被加入PYTHONPATH的目录下,有没有不小心拷贝进来的Django contrib模块,或者自己新建的、和内置app重名的文件夹(比如自己建了叫admin/auth的目录),如果有直接删除。
  3. 清理残留的错误缓存和文件:
    • 删除所有应用下migrations目录里除__init__.py之外的所有文件
    • 递归删除项目下所有__pycache__缓存目录
    • 删掉旧的数据库文件(sqlite直接删db.sqlite3,MySQL/PostgreSQL直接新建空库替换旧的连接配置)
  4. 重新执行初始化迁移:
    python manage.py makemigrations
    python manage.py migrate
    
  5. 执行完后跑python manage.py showmigrations验证,此时每个迁移条目只会出现一次,且前面带有[X]的已应用标记,再执行python manage.py createsuperuser就不会报冲突错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:39:16