44

そのため、現在djangoアプリを迅速に繰り返しており、models.pyを常に調整しています。プログラミングとテストに 1 日か 2 日かけて、数十個の移行ファイルを生成します。スキーマを本当にバラバラにして、完全にやり直すこともあります。これにより、移行プロセスがデフォルトや null 値などについて多くの不満を抱くようになります。可能であれば、すべての移行作業をスクラッチして、自分が何をしているのかがようやくわかったので、移行を再開したいと思います。これまでの私のアプローチは次のとおりです。

  1. を除く移行フォルダー内のすべてを削除します__init__.py
  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- このコマンドですべてのテーブルが再構築されることを期待していますが、代わりに「適用する移行はありません」と表示されます。

何を与える?

また、south_migrationhistorySouth を捨てて Django 1.7 に切り替えた今でも、データベース テーブルは有効ですか?

ありがとう。

4

2 に答える 2

36

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

コマンドは次のとおりです。 DELETE FROM django_migrations WHERE app='my_app'

これが完了すると、移行を最初からやり直すことができます。

于 2014-10-09T16:17:36.483 に答える
23

すべての手順をコマンド形式にしたかっただけです。

注:以下のコマンドは非常に破壊的です。これはstart from scratch、OP が求めた手段です。

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

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

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
于 2015-05-03T16:35:56.380 に答える