2012-10-08 26 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 
    

现在,改变你的模型文件新模式,再次运行所有步骤。

我希望这会帮助你。