删除自定义用户模型后执行makemigrations报错:No module named 'django.db.migrations.migration'
解决
No module named 'django.db.migrations.migration'错误的步骤 我来帮你一步步排查并解决这个问题——这个报错看似是找不到Django的核心迁移模块,但实际上几乎都是迁移文件清理不彻底或者自定义用户模型的配置残留导致的,咱们按顺序处理:
1. 先确认用户模型配置已恢复默认
打开项目的settings.py,找到AUTH_USER_MODEL这一行:
- 如果之前设置了自定义用户模型(比如
AUTH_USER_MODEL = 'myapp.MyCustomUser'),一定要把它改回默认值:AUTH_USER_MODEL = 'auth.User',或者直接注释掉这一行(Django默认就用auth.User)。 - 这一步非常关键,如果配置还指向已删除的自定义模型,Django会在生成迁移时出现连锁错误,间接触发找不到迁移模块的问题。
2. 彻底清理迁移文件和缓存
迁移文件残留是这类问题的高发原因,要做到完全清理:
- 遍历项目中每个应用的
migrations文件夹:- 删除其中所有文件,只保留
__init__.py(如果这个文件也被删了,就新建一个空的__init__.py,否则Django会认为该应用没有迁移模块)。
- 删除其中所有文件,只保留
- 删除项目根目录、每个应用目录下的
__pycache__文件夹(这些缓存文件可能残留旧的迁移信息)。 - 清理数据库:
- 如果用的是SQLite,直接删掉项目根目录的
db.sqlite3文件; - 如果是MySQL/PostgreSQL等数据库,登录数据库管理工具,删除整个数据库,再重新创建一个空的数据库,确保
settings.py中的数据库配置正确。
- 如果用的是SQLite,直接删掉项目根目录的
3. 重新生成并应用迁移
完成清理后,重新初始化迁移流程:
- 先运行命令生成初始迁移:
这时候应该会为Django默认的应用(比如python manage.py makemigrationsauth、admin、contenttypes等)生成初始迁移文件。 - 如果单独运行
makemigrations还是报错,可以先为auth应用单独生成迁移:
再执行全局的python manage.py makemigrations authmakemigrations。 - 最后应用所有迁移,初始化数据库:
python manage.py migrate
4. 极端情况:修复Django安装
如果以上步骤都无效,可能是Django本身的安装文件损坏了。可以尝试重新安装对应版本的Django:
pip uninstall django pip install django==你的Django版本号
为什么会出现这个错误?
django.db.migrations.migration是Django处理迁移的核心内部模块,正常情况下不会缺失。这个报错大多是因为:
- 残留的迁移文件或缓存指向了已删除的自定义用户模型,导致Django在解析迁移依赖时出现异常;
- 数据库中残留了旧的表结构或迁移记录(虽然你删了表,但可能还有
django_migrations表的残留,不过彻底删库就能解决)。
内容的提问来源于stack exchange,提问作者irakliy01
相关产品推荐
相关产品推荐

