使用Django 1.11.22,我正在尝试运行迁移
python manage.py migrate
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration base.0036_auto_20190227_1226 is applied before its dependency base.0027_auto_20170801_1228_squashed_0037_auto_20190222_1347 on database 'default'.
我第一次尝试解决这个问题是
sudo -u postgres psql -d albatros -c \
"DELETE FROM django_migrations WHERE name = '0036_auto_20190227_1226' AND app = 'base'"
希望从迁移表中删除迁移将对其进行修复。不幸的是,我现在得到:
CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0037_auto_20190222_1347, 0036_auto_20190227_1226 in base).
To fix them run 'python manage.py makemigrations --merge'
当tryin makemigrations --merge时,它找不到要合并的任何迁移。这就是showmigrations的样子:
./manage.py showmigrations base
base
[X] 24_initial
[X] 24_to_26
[X] 26_to_27
[X] 0027_auto_20170801_1228
[X] 0028_resourcebase_is_approved
[X] 0029_auto_20171114_0341
[X] 0030_auto_20180309_0833
[X] 0031_auto_20180309_0837
[X] 0032_auto_20180329_1844
[X] 0033_auto_20180330_0951
[X] 0034_auto_20180606_1543
[X] 0035_resourcebase_dirty_state
[ ] 0036_auto_20190227_1226
[ ] 0036_auto_20190129_1433
[ ] 0037_auto_20190222_1347
有人可以说如何正确应用迁移并解决多个叶节点错误吗?
答案 0 :(得分:1)
在这2个迁移文件(0037_auto_20190222_1347,0036_auto_20190227_1226)中,您具有相同的依赖性,请检查它们。他们似乎像是一个有元组的列表
dependencies = [
('round', '0008_auto_20200116_0752'),
]
您需要将“ 0036_auto_20190227_1226”手动写入0037_auto_20190222_1347文件依赖项变量。
答案 1 :(得分:0)
您可以合并迁移并进行迁移
(venv)yourprj$python manage.py makemigrations --merge
(venv)yourprj$python manage.py migrate
答案 2 :(得分:0)
解决此问题的另一种方法是使用 django-migration-fixer
可以使用
在您的开发分支上修复迁移$ git checkout [dev-branch]
$ git merge [main/master]
按照安装说明here
运行
$ python manage.py makemigrations --fix -b [main/master]
提交更改并推送到远程分支
$ git add .
$ git commit -am ...
$ git push ...