2016-11-22 13 views
0

ジャンゴ1.9.7、DB他のアプリに触れずに既存のスキーマを使用しているアプリの移行を修正するにはどうすればよいですか?

としてdb.sqlite3私はいくつかのアプリケーションでDjangoのプロジェクトを持っています。アプリ "A"の場合、私は移行していましたが、私は偶然それらを削除し、リモートgitにプッシュしました。また、他のアプリのための多くの新しいものがgitにプッシュされました。他のアプリは "A"アプリモデルに依存しません。

「A」アプリのモデルに新しいフィールドを追加するまでは、すべてが機能しました。私はOperationalError: no such column:エラーを受け取りました。私はアプリ "A" python manage.py migrate --fake-initialの初期移行を試みました。私は新しい移行を得ましたが、私はまだOperationalError: no such column:を持っています。

他のアプリの移行に影響を与えずにアプリの移行を修正するにはどうすればよいですか?

+0

ことができますだけではなく、以前のコミットに戻る? – Sayse

+0

@Sayseこのプロジェクトの中で他のアプリを開発している他の人は、すでにいくつかの新しいものを追加し、いくつかのマージをしました。 git revertを使わずに移行を修正することは可能ですか? – trex

答えて

1

gitからは、前回のコミットまでrevertを実行できます。ジャンゴを介して定着

git revert sha #commit sha of the last commit 

OR

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

(可能あとで任意の移行を追加しなかった場合。)、残念ながら

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

このプロジェクトの中で他のアプリを開発している他の人たちは、すでにいくつかの新しいものを追加し、いくつかのマージをしました。 git revertを使わずに移行を修正することは可能ですか? – trex

+0

私はDjangoの方法を試してみます – trex

0

git revertは私を助けていません。最後に、次の手順を実行して問題を解決しました。

1. db.sqlite3の "A"アプリケーションに関連するすべてのテーブルを手動で削除します。

2.Create新しい移行と既存のスキーマからdb.sqlite3テーブル:

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

3.Dumpバックバックアップからdb.sqlite3にテーブルのデータ:

sqlite3 ~/Backup/A/db.sqlite3 ".dump table_name" | grep -v "CREATE" | sqlite3 db.sqlite3 
関連する問題