2012-12-07 33 views
3

場景:我的Django應用程序中有一個應用程序,我從未將其放在南方管理之下。我很久以前就運行了一個syncdb,而且這個應用的模型從來沒有改變過。在很長一段時間內,我顯然已將數據添加到這些表格中。Django South - 爲已經填充表格的應用程序創建初始遷移

現在,我希望把這個應用程序下南管理,但一旦表已經存在,我可以創建遷移文件,但當然,我不能執行。我得到一個數據庫錯誤對於現有的表:

django.db.utils.DatabaseError: (1050, "Table 'ooyala_ooyalaitem' already exists")

這對我來說很明顯的。我想知道的是,如果有一種聰明的方式來運行migrate命令來使用當前表。我不想轉儲數據,手動刪除表,運行遷移並重新填充數據,我也不想爲此創建數據遷移。

對此的任何想法?它甚至有可能嗎?

謝謝你的時間。

+0

我認爲「該死的手冊」是不是有據可查的在這個問題上。在葡萄牙一個解釋可以在這裏獲得:http://django-na-pratica.blogspot.com.br/2011/11/iniciando-o-south-em-uma-base-ja.html – Josir

回答

12

This is covered in the manual

轉換一個應用程序使用南是很容易的:

  • 編輯您的settings.py,並把「南」爲INSTALLED_APPS(假設你安裝它在正確的地方)
  • 運行./manage.py syncdb將南表加載到數據庫中。請注意,syncdb現在看起來不同 - 南修改它。
  • 運行./manage.py convert_to_south myapp - 南會自動製作並假裝應用您的第一次遷移。

請注意,你需要你做出任何更改之前轉換; South通過比較上次遷移的凍結狀態來檢測更改,因此它無法檢測到您轉換爲使用South之前的更改。