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

Django多租户执行migrate_schemas报KeyError: 'prune'问题求助

问题根因

该报错由Django与django-tenants版本不兼容触发,和本次模型字段调整、迁移文件内容没有关联:

  • Django 4.1及以上版本为原生migrate命令新增了--prune启动参数,执行逻辑中会直接读取options["prune"]判断是否需要清理已不存在的迁移记录
  • 当前环境安装的django-tenants版本过低,其内部封装的migrate_schemas命令调用原生迁移逻辑时,传入的参数字典未包含prune键,直接触发键不存在的KeyError
  • 回滚模型变更、使用全新空库仍复现问题的原因是:报错发生在迁移流程正式启动前的参数读取阶段,根本没走到迁移文件解析、数据库操作的步骤,和业务侧的迁移内容完全无关。
修复方案

按优先级选择任意一种即可解决:

  • 优先升级django-tenants至兼容Django 4.1+的正式版本,升级完成后无需修改业务代码,直接执行./manage.py migrate_schemas即可正常运行,这是长期有效的根治方案
  • 若暂时无法升级django-tenants,可做应急修复:找到虚拟环境路径下的django_tenants/migration_executors/base.py文件,在调用原生MigrateCommand的代码前补全缺失的参数默认值:
# 原代码第53行前新增一行
options.setdefault("prune", False)
MigrateCommand(stdout=stdout, stderr=stderr).execute(*args, **options)

该方案属于直接修改第三方依赖源码的临时操作,后续升级依赖时修改会被覆盖,仅适合应急场景使用

  • 若无法升级django-tenants也不想修改依赖源码,可将Django回退至4.0.x及更早未引入--prune参数的版本,该方案需要评估Django版本降级带来的安全补丁缺失、功能不兼容问题,非必要不选择。
校验方法

修复完成后先执行./manage.py migrate_schemas --help,如果输出的帮助信息参数列表中包含--prune选项,再正式执行迁移命令就不会再触发该KeyError。

内容的提问来源于stack exchange,提问作者Alfonso Irarrázaval

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:09:42