如何在不触及其他应用的情况下修复具有现有架构的应用的迁移?

时间:2016-11-22 09:49:19

标签: django django-migrations

Django 1.9.7,db.sqlite3 as DB

我有一个包含多个应用程序的Django项目。对于应用程序“A”,我进行了迁移,但我意外删除了它们并推送到远程git。此外,其他应用程序的许多新内容在白天被推送到git。其他应用程序不依赖于“A”应用程序模型。

一切顺利,直到我决定在“A”应用的模型中添加新字段。我收到OperationalError: no such column:错误。我尝试为应用“A”python manage.py migrate --fake-initial进行初始迁移。我有新的迁移,但我仍然有OperationalError: no such column:

如何在不影响其他应用迁移的情况下修复“A”应用迁移?

2 个答案:

答案 0 :(得分:1)

git的角度来看,您可以执行revert之前的提交。

git revert sha #commit sha of the last commit

git reset --hard HEAD~n #n how many commits to remove.
git push --force

通过django修复(如果之后没有添加任何迁移,则可能。)

python manage.py makemigrations APP_A --empty
python manage.py makemigrations APP_A 
python manage.py migrate --fake

答案 1 :(得分:0)

不幸的是git revert没有帮助我。最后,我通过执行以下步骤解决了这个问题:

1.手动删除与" A"相关的所有表格。 db.sqlite3中的应用程序。

2.从现有架构创建新的迁移和db.sqlite3表:

python manage.py makemigrations A --empty
python manage.py makemigrations A
python manage.py migrate

3.将表数据从备份转储回db.sqlite3:

sqlite3 ~/Backup/A/db.sqlite3 ".dump table_name" | grep -v "CREATE" | sqlite3 db.sqlite3