特定の順序で実行する必要があるかなりの量のカスタム SQL を含むプロジェクトなど、南部への移行が多いプロジェクトがいくつかあります。Django 1.7 にアップグレードした後、South を使用するようにプロジェクトを変換する方法に関する推奨事項は次のとおりです ( Django ドキュメントから)。
South で作成された既存の移行が既にある場合、django.db.migrations を使用するためのアップグレード プロセスは非常に簡単です。
- すべてのインストールが移行で完全に最新であることを確認してください。
- INSTALLED_APPS から「南」を削除します。
- すべての (番号付きの) 移行ファイルを削除しますが、ディレクトリ
__init__.py
は削除しないか、.pyc ファイルも削除してください。- python manage.py makemigrations を実行します。Django は空の移行ディレクトリを確認し、新しい形式で新しい初期移行を行う必要があります。
- python manage.py migrate を実行します。Django は、最初の移行のテーブルが既に存在することを確認し、それらを実行せずに適用済みとしてマークします。
要するに、「既存の移行を消去すると、Django が残りを処理します」。
ここで言及されていないのは、既存の南部の移行がモデルの変更だけで構成されているのではなく、順番に実行する必要がある直接の SQL、データの移行などが含まれている場合の対処方法です。この場合、自動生成された Django の移行では多くのことが見落とされます。これらの変更のすべてがモデル ファイルのイントロスペクションから明らかになるわけではないためです。
理想的には、South を使用して既存の移行を実行し、その後 Django の移行を引き継ぐことができます。これについて最善の方法は何ですか?これが不可能な場合、またはあまり推奨されない場合、最善の代替手段は何ですか?