2013-01-09 123 views
6

在我的項目的最初階段,我對模型做了很多更改,因此我最終爲我的應用程序生成了大量南遷移。是否有可能在進入我的生產服務器執行遷移之前以任何方式對它們進行整合,因此我不需要爲每個應用程序進行百萬次遷移?如果是這樣,我會怎麼做呢?鞏固Django南遷移

回答

5

您可以隨時刪除現有的遷移和create a new "initial" migration

要做到這一點,你將需要:

  1. (完全刪除的文件夾)中刪除遷移文件爲您的應用程序
  2. 運行./manage.py convert_to_south myapp

這將留給你一個遷移對應於您的應用的狀態當前狀態。


或者,你可以隨時收拾最新的遷移在一起:

  1. 刪除要合併(僅當它們是最新onces)遷移文件
  2. 運行./manage.py schemamigration myapp

這將創建一個新的遷移,對應於您刪除的遷移。


這兩個都可能會搞亂你的開發數據庫。

+0

因此底線是:否,最好讓遷移自行生效? – hkothari

+1

@hkothari這就是我要做的,是的! –

+1

需要'manage.py migrate 零--fake'來清除你的南數據庫(在convert_to_south或'manage.py schemamigration --initial'之前。或者,'--delete-ghost-migrations'將有選擇地刪除您從migrations目錄中刪除的任何遷移 – hobs

1

由於這是一個開發環境,這是我要做的事(使用SQLite,請參閱下面的其他SQL服務器):

  1. 是否所有的變化,讓遷移文件堆積起來。沒有提交 遷移文件VCS
  2. 完成後,刪除所有的新移民文件
  3. 重命名數據庫
  4. 運行manage.py遷移。這將創建數據庫結構,就像在對其進行任何更改之前一樣。
  5. 運行manage.py makemigrations。這將創建一個反映當前狀態
  6. 搬回已經有使用「正確」的SQL服務器上的最終結構&數據
  7. 提交遷移文件

原始數據庫必要的遷移,只是不停地2數據庫:生產和開發。將項目設置更改爲指向生產數據庫,而不是在步驟3中重命名。此外,您可以跳過步驟4.