web-dev-qa-db-ja.com

django 1.7移行-すべての移行をクリアして最初からやり直すにはどうすればよいですか?

だから私はDjangoアプリで急速に反復しており、models.pyを絶えず調整しています。1、2日のプログラミングとテストの過程で、数十の移行を生成します時々、スキーマを実際にバラバラにして完全にやり直します。これにより、移行プロセスでデフォルト値やnull値などについて多くの苦情が寄せられます。 -私がやっていることをようやく理解できたので、移行を開始します。

  1. __init__.pyを除く、migrationsフォルダー内のすべてを削除します。
  2. postgreSQLコンソールにドロップして、以下を実行します。DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. postgreSQLコンソールで、my_appに関連付けられているすべてのテーブルを削除します。
  4. ./manage.py makemigrations my_appを再実行します-これにより、移行フォルダーに0001_initial.pyファイルが生成されます。
  5. run ./manage migrate my_app-このコマンドはすべてのテーブルを再構築することを期待していますが、代わりに「適用する移行はありません」と表示されます。

何が得られますか?

また、南をダンプしてDjango 1.7?に切り替えたので、south_migrationhistoryデータベーステーブルはまだ使用中です。

ありがとう。

39
jononomo

したがって、質問で概説した段階的な計画は機能しますが、south_migrationhistoryデータベーステーブルから行を削除する代わりに、Django_migrationsデータベーステーブルから行を削除する必要がありました。

コマンドは:DELETE FROM Django_migrations WHERE app='my_app'

これが完了すると、移行を最初から再実行できるようになります。

34
jononomo

すべてのステップをコマンド形式にしたかっただけです。

注:以下のコマンドはかなり破壊的であり、OPが要求したstart from scratchへの手段です。

mikebからのコメントの後、次の行を追加することを考えました。

PRE-削除するファイルを確認してください

find . -path *migrations* -name "*.py" -not -path "*__init__*"

次に、ステップ1のコマンドを、開発環境で機能するコマンドに調整します。

  1. すべてのアプリからすべての移行を削除します。
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
  1. データベース全体を再作成します。
Sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\""
Sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\""
Sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
  1. 最新のデータベースを取得します。
python3 manage.py makemigrations
python3 manage.py migrate
20
mimoralea