2015-06-04 40 views
3

Django文檔說,我們可以擠壓他們後刪除遷移:如何在壓縮django之後刪除它們?

你應該犯這種遷移,但留下的舊到位; 新遷移將用於新安裝。一旦確定代碼庫的所有 實例都已應用您壓縮的遷移,您可以刪除它們。

這裏,刪除意味着只刪除遷移文件,還是刪除django_migrations表中的條目?

這裏有一些背景:我只有開發機器,所以只有一個代碼庫。在壓縮了我已經應用的一些遷移之後,我刪除了這些文件和數據庫條目。經過測試,如果通過遷移確定,它沒有發現任何東西。所以,一切都很好。第二天,我不得不改變一些東西,並進行移民。當我嘗試遷移時,它也嘗試應用壓扁的遷移(在被壓扁之前部分應用)。所以,我不得不回去重新創建django_migrations表中的條目。所以,我似乎必須保留數據庫條目。我試圖在我再次搞亂任何事之前確定它,並理解它爲什麼看起來很好,然後嘗試應用壓扁的遷移。

回答

3

壓扁的遷移永遠不會被標記爲已應用,將在1.8.3中進行修復(請參閱#24628)。

刪除舊的遷移的步驟如下:

  1. 確保全部換成遷移應用(或沒有人)。
  2. 刪除舊遷移文件,從壓扁的遷移中刪除replaces屬性。
  3. (解決方法)運行./manage.py migrate <app_label> <squashed_migration> --fake

當1.8.3到達時,最後一步將不再需要。

0

我以任何方式的專家,但我只是壓扁我的遷移,並最終做了以下內容:

然此查詢刪除舊的遷移(擠壓)

DELETE FROM south_migrationhistory; 

運行這種管理命令刪除幻像遷移

./manage.py migrate --fake --delete-ghost-migrations 

的Django 1.7也有squashmigrations

+0

我應該提到我用Django的1.8,所以這不是一個向南遷移。但感謝您的答案。 – mehmet

1

自問題發佈以來,轉換壓扁的遷移變得更加容易。我發佈了一個small sample project,演示瞭如何壓縮具有循環依賴關係的遷移,並且還展示了在所有安裝遷移到壓扁點之後如何將壓扁遷移轉換爲常規遷移。

正如Django documentation說:

  • 刪除所有它所取代的遷移文件:

    您必須再由過渡壓扁遷移到正常遷移。

  • 更新所有依賴於已刪除遷移的遷移取決於壓扁的遷移。
  • 刪除擠壓遷移的Migration類中的替換屬性(這是Django如何告訴它是壓扁的遷移)。
相關問題