Django执行makemigrations报'MigrationLoader'无items属性如何解决
问题修复方案
错误根因
该报错是Django加载迁移文件时,读取到残留的无效迁移缓存、损坏的迁移目录结构,或是Django版本不匹配,导致MigrationLoader对象状态异常,无法正常调用items方法。
操作步骤
- 彻底清理迁移残留
- 保留各app下migrations目录中的
__init__.py文件,删除该目录下其余所有迁移文件,同时删除migrations目录下的__pycache__文件夹 - 确认项目根目录下的sqlite数据库文件、sqlite临时文件已完全删除
- 清理Python字节码缓存
执行命令清理所有残留的pyc缓存文件:
Linux/macOS:
find . -name "*.pyc" -delete
Windows:
del /s /q *.pyc
- 重新生成迁移文件
不要直接执行全局makemigrations,先逐个给自定义业务app生成迁移,避免索引混乱:
python manage.py makemigrations 你的app名称
所有自定义app都生成完迁移后,再执行全量迁移:
python manage.py migrate
如果单app生成还是报错,可以临时在settings.py的INSTALLED_APPS里注释第三方扩展app,只保留自定义app,生成完成后再取消注释即可
- 版本兼容校验
如果以上操作后仍然报错,检查虚拟环境的Django版本是否和项目依赖一致:
- 执行
pip show django查看当前安装版本 - 对比项目requirements.txt/requirements.lock里指定的Django版本,版本不一致时卸载当前版本重新安装对应版本即可
内容的提问来源于stack exchange,提问作者Alireza Aliabadi
相关产品推荐
相关产品推荐

