1

我對遷移中創建表的順序有疑問。由於模型B中的ForeignKey連接到模型A,因此我在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之前創建。儘管我閱讀了一些應用程序的doc。 A可以在模型B中使用以避免訂單問題,但是我在這裏繼續按照正確的順序在models.py – zhihong

回答

1

將模型放置在models.py中的順序當且僅當其中一個引用另一個作爲ForeignKey。在這種情況下,訂單很重要,您會發現遷移確實保持訂單。

什麼是真正重要的不是當你做什麼時顯示,但當你做manage.py migrate時會發生什麼,django通常會找出正確的順序。如果在任何時候你覺得你想控制創建表的順序,你可以自由編輯遷移文件(儘管這不是真的需要)

+0

中創建模型是的,我使用了ForeignKey,這就是爲什麼我在models.py中控制模型順序的原因。但自動生成的遷移文件不符合順序。所以這是正常的情況,對吧?對我來說,這只是有點混亂。我希望只看到「 - 創建模型」,但不會像「 - 創建模型 - 添加到模型的字段」,這就像創建和修改表格一樣。 – zhihong

+0

啊,我知道,我知道遷移可以被修改,但正如你所說,如果真的需要的話,不會那樣做。非常感謝解釋。 – zhihong

+0

嗨,因爲我還需要在數據庫中創建表時控制列的順序,但manage.py makemigrations在列是ForeignKey列時不保留順序,所以我修改了遷移文件。我真的希望遷移文件具有模型,並且列遵循models.py的順序,但似乎沒有。 – zhihong