2013-11-26 128 views
5

我使用django南在django項目中遷移數據庫表。而且我重命名一個模型作爲a previous question討論:Django南遷移與--noinput不會刪除重命名錶

# Renaming model from 'Foo' to 'Bar'                              
    db.rename_table('myapp_foo', 'myapp_bar')                               
    db.send_create_signal('myapp', ['Bar']) 

但是,我用fabric自動部署應用到生產服務器,我想遷移到沒有任何用戶輸入運行。對於這一點,我運行遷移命令和noinput選項如下

python manage.py migrate --noinput 

這個工程除了send_create_signal不會在此模式下刪除陳舊CONTENTTYPES罰款。

這是因爲django contenttype managament命令update_contenttypes只在給出輸入時才刪除陳舊的contenttypes。

我可以直接在南遷移中複製update_contenttypes命令,但這似乎不是一個好的解決方案。有沒有人有關於如何觸發刪除內容類型而不重複django命令中的內容的建議?

+0

你爲什麼要用--noinput遷移? – Thomas

+0

這是因爲我想部署到生產服務器而無需人工交互。我使用結構腳本將代碼庫從存儲庫部署到完全自動化的服務器。爲了能夠做到這一點,我正在尋找一個沒有人工輸入的解決方案。 – yellowcap

+1

然後,您應該可以複製該命令,或者創建一個數據遷移並手動刪除受影響的content_types。 – Thomas

回答

1

根據我的經驗,運行manage.py syncdb --all有一定的作用,但不是所有的時候都是南方參與的。您可以嘗試一下,因爲它過去一直適用於我,當然,在從內容類型表中刪除陳舊的模型時也是如此。