2012-10-08 44 views
1

Django框架有一個問題。 我改變了一個模型插入此:Django管理站點在更新後不顯示新列

masterweb_link = models.CharField(_('masterweb_link'), help_text=_('link to MasterWeb tour'), max_length=300, null = True, blank = True) 

之後,我是這樣的: - python manage.py syncdb

和db_application被改變,現在我可以在管理面板新列的工作。 在我的本地pc上,一切都很好,當我試圖檢查它。

但是,當我嘗試在主機上做到這一點,畢竟我的行爲模型修改和數據庫太多,但Django管理站點不顯示新的列。

我沒有錯誤,當我做我所有的行動!請幫忙。

回答

1

正如丹尼爾羅斯曼提到的,syncdb不修改現有的表。

要做到這一點,你需要通過轉換現有的應用程序使用south使用southhttp://south.aeracode.org/

一個非常快速步行。首先,您可以使用easy_install通過鍵入easy_install South來安裝它。如果您希望從Mercurial或快照tar.gz進行安裝,則需提供說明here

安裝完成後,您需要將現有應用程序轉換爲使用south。在您的應用程序的settings.py文件中,將south添加到INSTALLED_APPS,然後重新運行python manage.py syncdb。所有這些都是爲south應用程序添加數據表。它還沒有對你的模型做任何事情。

現在,您要撤消您在原始帖子中所做的更改。回到原來的狀態。我們將在幾分鐘內完成此更改,但首先,我們需要告訴south您的應用程序看起來像現在

python manage.py convert_to_south <appname>用您的應用程序的名稱替換<appname>。這將爲您的應用程序創建初始遷移文件。

將這些更改提交給您的版本控制(或通過正常流程將應用程序分發給其他開發人員)。它應該是您的應用程序目錄中名爲migrations的新文件夾。您需要提交/分發出現在該文件夾中的所有文件。

有一次的事:你的應用程序安裝的每個地方都需要運行這個命令來轉換爲使用南。 python manage.py migrate <appname> 0001 --fake根據documentation,這是必需的,因爲convert_to_south進行的初始遷移將嘗試創建所有現有表;相反,您告訴南方它已經應用--fake,所以下一次遷移正確應用。

現在,我們要做出改變。重新編輯您的模型以進行所需的更改。保存模型。

運行此命令:python manage.py schemamigration <appname> --auto。 South將分析您的模型以及它們如何更改並創建遷移腳本。這就是爲什麼我們需要將您的更改恢復到原始狀態。否則,south將不知道它從哪裏遷移。

完成後,運行python manage.py migrate <appname>。再次提交或分發migrations文件夾。這部署的每個位置都需要運行python manage.py migrate <appname>

將來,當您進行架構更改時,您將運行python manage.py schemamigration <appname> --auto來創建遷移腳本並且python manage.py migrate <appname>來安裝更改。

我還建議看看其他東西的文檔south是能夠在遷移過程中處理。上面應該讓你開始。南的文檔是位置here

3

syncdb不修改現有表。

+1

使用[south](http://south.readthedocs.org/en/latest/index.html)進行遷移。 – Matthias

+0

我自己修改了db中的表。 – chuve

1

如果沒有任何工作,嘗試刪除模型文件中的模型,然後syncdb,並嘗試使用django進化之後,重置django_evolution,然後syncdb後,所有這一切再次嘗試改變你的模型文件再次運行的步驟,我希望這將解決這個問題,它的工作在我的情況...

以下是具體步驟:

1改變你的模型文件舊。

  1. 然後運行syncdb。

    ./manage.py syncdb 
    
  2. 然後運行演變:

    ./manage.py evolve --hint 
    
  3. 執行演變:

    ./manage.py evolve --hint -x 
    
  4. 復位Django的演變:

    ./manage.py reset django_evolution 
    
  5. 運行S yncdb:

    ./manage.py syncdb 
    

現在,改變你的模型文件新模式,再次運行所有步驟。

我希望這會幫助你。