web-dev-qa-db-ja.com

最近のDjango=移行をつぶすには?

Djangoの移行コードには、squashmigrationsコマンドがあります。「app_labelまでの移行をmigration_nameまで削減し、可能であればより少ない移行にします。」

したがって、たとえば最初の5回の移行を無効にする場合は、これが役立ちます。

特定のmigration_nameで始まるスカッシュの最良の方法は何ですか?

私が現在取り組んでいるプロジェクトでは、新しい機能を追加したため、5〜10個の新しい移行ファイルを追加しました。プロジェクト全体を一度にデプロイしますが、これらを個別に実行するには時間がかかりすぎるようです。このプロジェクトのすべての移行を1つの移行にまとめ、それを実行する時間をテストしたいと思います。

26
Doug Harris
python manage.py squashmigrations <appname> <squashfrom> <squashto>

python manage.py help squashmigrations

https://docs.djangoproject.com/en/dev/topics/migrations/#migration-squashing

これにより、どの移行をスカッシュするかをよりきめ細かく制御できるようになり、コミット履歴をよりクリーンに保つことができます。すべての移行を削除して再作成すると、モデルの構築方法によっては循環依存関係などの他の問題が発生する場合があります。

49
A---

移行ファイルを削除して、makemigrationsを再度実行するだけです。これらを使用するdevデプロイメントがある場合は、最初に削除する前のものに migrate back する必要があります。

また、何か問題が発生した場合に備えて、最初にコードをコミットすることをお勧めします。

また:

これのわずかな複雑さは、カスタムRunPythonコードがある場合、makemigrationsによって作成された新しい移行に含まれないことです。

10
Dan