1

移行でテーブルが作成される順序について質問があります。モデルAに接続するモデルBにForeignKeyがあるので、models.pyにA、B、Cの順番でモデルを作成します。その後:Django makemigrationsはmodels.pyでモデルを作成しません

python manage.py makemigrations app 

すべてのモデルを作成するために、生成された移行ファイルがありますが、順序は次のとおりです。

- Create model B 
- Create model C 
- Create model A 
- Add field a_name to b. 

models.pyでの順序は本当に重要が、なぜないmakemigrationsフォローが行うように与えられた順序?

+1

なぜmodels.pyの注文が問題になるのですか?それはまだ移行ファイルに関連していますか? – knbk

+0

@knbk、モデルBでForeignKeyを使用するので、モデルAはBの前に作成する必要があります。 AはモデルBで注文の問題を避けるために使うことができますが、ここではmodels.pyの正しい順序でモデルを作成します。 – zhihong

答えて

1

モデルをmodels.pyに配置する順番は、そのうちの1つがForeignKeyと別のものを参照する場合にのみ重要です。このような状況では、注文は重要で、移行によって注文が保持されることがわかります。

本当に重要なのは、anage.py makemigrationsを実行したときに表示されるものではありませんが、manage.py migrateを実行するとどうなりますか?通常、djangoは正しい順序を見つけます。いつでもテーブルの作成順序を制御したいと思っている場合は、マイグレーションファイルを自由に編集することができます(これは本当に必要ではありません)。

+0

はい、私はForeignKeyを使用しています。 。しかし、自動生成された移行ファイルはその命令に従わない。それは正常な場合です、そうですか?私にとっては、ちょっと混乱しているだけです。私は "モデルを作成する"としか思っていませんが、 "モデルにモデルを追加してモデルに追加する"のようには思えません。これはテーブルを作成して修正するようなものです。 – zhihong

+0

ああ、私は移行が修正できることを知っていますが、あなたが言ったように、それが本当に必要であればそれをしません。説明をありがとう。 – zhihong

+0

こんにちは、データベースのテーブルを作成したときに列の順序を制御する必要がありますが、列がForeignKey列のときにmanage.py makemigrationsが順序を予約しないため、移行ファイルを変更しました。マイグレーションファイルにモデルがあり、カラムがmodels.pyのオーダーに従っていることを本当に願っていますが、そうではないようです。 – zhihong

関連する問題