Django升级后运行测试报relation "auth_user"不存在错误如何解决?
Django 1.9升级3.2后无迁移文件执行测试报错解决方案
报错根因
你本地缺失项目历史迁移文件,Django运行测试时会自动创建全新的测试库,没有迁移文件就无法执行表结构初始化,因此会抛出auth_user表不存在的错误。常规makemigrations检测不到变更,是因为当前连接的开发库已经存在对应表结构,Django会判定模型和数据库已同步。
可行解决方案
方案一:全量生成初始迁移文件(推荐,一劳永逸解决后续迁移问题)
- 临时修改
settings.py中的数据库配置,将数据库名改为一个不存在的空库名称,避免现有库表结构干扰迁移检测 - 执行全量迁移生成命令:
此时Django会检测到所有模型都需要初始化,自动为所有应用(包括auth等内置应用)生成初始迁移文件python manage.py makemigrations - 把数据库配置改回原来的开发库配置,执行fake迁移标记所有迁移已执行,不会修改现有库表:
python manage.py migrate --fake - 将新生成的所有
migrations目录下的文件提交到Git仓库,后续所有团队成员拉取后只需执行一次migrate --fake即可同步迁移状态 - 再次运行测试命令即可正常初始化测试库
方案二:测试场景临时规避(仅应急使用)
如果不需要处理正式迁移流程,只是临时要跑测试,可以加--keepdb参数复用现有测试库,跳过销毁重建流程:
python manage.py test --keepdb
注意事项
Django 3.2默认主键字段从AutoField改为BigAutoField,如果你的生产库表主键仍为int类型,需要在settings.py中添加配置避免后续迁移出现字段类型不兼容问题:
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
内容的提问来源于stack exchange,提问作者nKn
相关产品推荐
相关产品推荐

