ちょっとした背景:私たちは docker コンテナーを使用して django プロジェクトを実行しています。プロジェクトに取り組んでいる人がたくさんいるので(これが正しいか間違っているかは別の問題です)、マージの競合を避けるためにmigrations
フォルダーを配置しました。gitignore
毎回makemigrations
実行されます-それは常に001_initial.py
、Docker が何も含まmigrations
れていない git プロジェクトをコピーするためです。migrate
どの変更をデータベースに適用するかは、コマンド次第です。新しいフィールド (または名前が変更されたフィールド) がある場合、コマンドが実行されると、django はそれらの変更が既にデータベースにあると見なし、移行を適用しないことがよくmyapp\migrations\001_initial.py
ありmigrate
ます。データベースを消去して移行をやり直していますが、これは開発では問題なく機能しますが、明らかに本番環境では機能しません。これに関連する質問があり、以前の移行に戻すように勧められた人がいます。これは、リセットされ、いくつかの場合に機能したようです。たとえば、次のようになります。
python manage.py migrate myapp zero
しかし、データベースに完全に新しいテーブルを持つリレーションがある場合 (そのため、django はテーブルが存在しないと不平を言う)、元に戻そうとすると、一部には docker コンテナーでの移行が常に から開始されるため、常に機能するとは限りません001_initial.py
。
これは django のバグですか、それとも適切なプラクティスに従っていないため、問題が発生していますか? migrations
古い移行に戻すことができるフォルダーを削除することを考えていますが、gitignore
これで問題が解決するかどうかは完全にはわかりません。さらに、django プロジェクトがコンテナーで実行されているためmigrations
、コンテナー内のファイルは git リポジトリにコミットされません。