有的时候我们对Django Models进行了某些修改会导致在新创建数据库时运行之前生成的 migration 文件报错
思路就是把原来的 migration 文件删除,重新生成,但要注意线上已有的环境中会记录已运行过的 migration,直接删除重新生成会导致原有环境 migrate
报错,这时候我们就要使用 squashmigrations
,具体步骤如下:
squashmigrations
命令合并现有的 migration 文件:./manage.py squashmigrations backup 0001_initial 0016_auto_20190904_2035
会生成一个 0001_initial_squashed_0016_auto_20190904_2035.py 文件
./manage.py makemigrations backup
生成一个新的 0001_initial.pyoperations = [...]
这段代码替换成新 0001_initial 中的 operations要注意的是被合并的migration文件要在原有环境中全部被运行过,通过数据库表中的 django_migrations 表可以查看到当前环境运行到了哪个 migration 文件