簡體   English   中英

Django-南遷移-如何將大型遷移分解為幾個較小的遷移? 如何使南方變得更聰明?

[英]Django - South migration - how do I break a large migration down into several smaller migrations? How can I make South smarter?

我對數據庫架構進行了一些調整,現在可以運行了:

> ./manage.py schemamigration --auto my_app

但是,South對設置某些字段的默認值等提出了各種異議。它也沒有意識到我已經在一個表中重命名了某個列的事實-它認為我要刪除一個列並添加另一個列,實際上,我只重命名了一個列。 如何使南方變得更聰明? 另外,是否可以將這種遷移分解為幾個較小的步驟?

您提到了兩個問題:有關默認值的警告消息以及無法檢測到重命名的列。

關於第一個,南方可能在做正確的事。 如果添加非NULL的列,South必須在數據庫中放置一些內容 ,因此它會提示您說出應該是什么。

關於第二個,不幸的是,South不處理列重命名。 解決方案是創建您自己的遷移並使用db.rename_column 看到這個答案

盡管以較小的增量進行模式更改是有意義的,但實際上聽起來好像South並未對更改的數量感到困惑。 鑒於您現在的位置,我建議您首先撤消列名更改並運行schemamigration --auto以處理所有其他更改。 我懷疑這會很好。 然后創建一個新的遷移,以對列進行重命名。

我發現在對模型定義進行的每一次更改后進行遷移都是有幫助的,而不是對多個更改進行1次大遷移,許多較小的遷移可以提供更大的粒度,並且在1次遷移/更改不起作用而不是嘗試時更容易看到調試,一次更改x,盡管在當前情況下這可能無法幫助您

記住,如果事情變得太瘋狂了,您可以刪除應用程序的南方管理,然后使用當前模型狀態重新開始遷移

創建新模型時,可以在添加屬性之前向南運行一次。 這將一步創建表格。 然后,當您進行更改時,一次更改一個模型並一次為一個表創建遷移。

通過這樣做,我發現遷移更加干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM