Django迁移报错:无法解析关联模型,新增Purchaser模型后migrate失败
兄弟,我之前也踩过类似的坑,你在standard应用新增Purchaser模型后makemigrations正常,但migrate时卡在tracking的迁移上,大概率是迁移依赖顺序不对或者tracking的迁移文件里引用了还未创建的Purchaser模型,给你几个具体的排查和解决步骤:
先看报错核心信息
Running migrations: Applying tracking.0002_auto_20180418_1909...Traceback (most recent call last): File "manage.py", line 21, in
execute_from_command_line(sys.argv) File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\django\core\management_init_.py", lin...
排查方向1:检查tracking迁移文件的依赖
打开tracking/migrations/0002_auto_20180418_1909.py,看顶部的dependencies列表,是不是没有包含standard应用新增Purchaser后的那个迁移文件(比如standard.000x_purchaser)?
如果是这样,手动修改dependencies,把standard的最新迁移加进去:
dependencies = [ ('tracking', '0001_initial'), ('standard', '0002_purchaser'), # 这里换成你实际的standard迁移编号 ]
保存后再重新执行python manage.py migrate。
排查方向2:调整迁移执行顺序
如果tracking的迁移是在standard的Purchaser迁移之前生成的,那migrate时会先跑tracking的迁移,这时候数据库里还没有Purchaser的表,自然会报错。解决步骤:
- 先回退
tracking到上一个正常的迁移版本:python manage.py migrate tracking 0001_initial - 先执行
standard的迁移,创建Purchaser表:python manage.py migrate standard - 重新为
tracking生成正确的迁移文件:python manage.py makemigrations tracking - 最后执行所有迁移:
python manage.py migrate
排查方向3:检查tracking迁移文件的代码错误
打开tracking的0002迁移文件,仔细看里面的操作,是不是有拼写错误(比如把Purchaser写成了Purchasers),或者字段定义错误(比如外键关联了不存在的模型)?如果发现错误,修正后再执行migrate。
终极方案:删除错误迁移文件重新生成
如果上面的方法都没用,可以直接删掉tracking的0002迁移文件,然后重新生成:
- 删除
tracking/migrations/0002_auto_20180418_1909.py文件 - 重新生成
tracking的迁移:python manage.py makemigrations tracking - 执行迁移:
python manage.py migrate
内容的提问来源于stack exchange,提问作者Sam Drescher

