2016-12-16 184 views
0

我在Django 1.9.8在網站上的工作,和我想它的一個更新版本部署到服務器演示它。遷移到現有的數據庫中沒有匹配遷移

正如我一直在學習的Django我開發這個,我已經取得了誤刪我的遷移,並創造新的,當我遇到數據庫問題的幾十倍。當我能夠刪除現有的數據庫時,這在我的開發中可以正常工作,但是會導致試圖在演示服務器上部署此問題而不會丟失現有數據庫數據的問題。

我沒有在演示服務器上現有的數據庫模式遷移,當我運行manage.py makemigration <myappname>,它創建了一個應用程序初始遷移。當我嘗試運行manage.py migrate <myappname>,它告訴我,該表已經存在(因爲遷移嘗試添加所有這些表的,而不是做需要在數據庫上進行修改)。

有沒有辦法根據當前數據庫創建初始遷移,然後我可以運行makemigrations來獲得將修改當前數據庫以使其與當前模型保持最新的遷移?

Appologies如果這已經是某個地方說,我已經看了看,沒有勒金中找到答案。

謝謝!

+0

看看Django文檔的這一部分:https://開頭的文檔。 djangoproject.com/en/1.10/howto/legacy-databases/這可能會幫助你 – Ire

+0

當然你的代碼是在版本控制,但?難道你不能恢復刪除你的遷移的變化嗎? –

回答

1

的Django認爲遷移已經運行,因爲有在django_migrations表中的遷移項。這是django註冊已經完成的遷移的地方。您需要進入postres並刪除不需要的遷移行。這假設你的db schema與你的models.py相匹配。如果有差異,您需要手動編輯遷移文件以消除任何差異,或修改models.py temporariliy以匹配。

​​

現在刪除所有遷移文件夾在您的應用程序,然後運行: ./manage.py遷移--fake-初始

如果你的models.py或遷移進行編輯,以匹配當前的DB模式你現在要在其上運行的差異遷移,運行./manage.py makemigrations,然後遷移

也看這裏:Django 1.8: Create initial migrations for existing schema