Django管理站点在更新模型后不显示新列

时间:2012-10-08 17:00:36

标签: python django django-models django-admin django-views

我有一个Django Framework的问题。 我更改了一个模型插件:

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已更改,现在我可以使用管理面板中的新列。 在我的本地电脑上,当我试图检查时,一切都很好。

但是,当我尝试在主机上执行此操作时,在我的所有操作模型修改和数据库之后,但Django管理站点不显示新列。

当我做所有的行动时,我没有错误!请帮忙。

4 个答案:

答案 0 :(得分:3)

syncdb不会修改现有表格。

答案 1 :(得分:1)

正如Daniel Roseman所说,syncdb不会修改现有的表格。

为此,您需要使用south http://south.aeracode.org/

快速浏览将现有应用转换为使用south。首先,您可以通过键入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的新文件夹。您需要提交/分发此文件夹中显示的所有文件。

一次性:安装应用程序的任何地方都需要运行此命令以转换为使用south。 python manage.py migrate <appname> 0001 --fake根据documentation,这是必需的,因为convert_to_south进行的初始迁移将尝试创建所有现有表;相反,您告诉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能够在迁移期间处理的其他内容的文档。以上应该可以让你开始。 South的文档是位置here

答案 2 :(得分:1)

如果没有任何效果,请尝试删除模型文件中的模型,然后在重置django_evolution之后尝试使用django evolution,然后再尝试syncdb,再次尝试更改模型文件再次执行步骤,我希望这将解决问题,它适用于我的情况......

以下是步骤:

1将您的模型文件更改为旧文件。

  1. 然后运行syncdb。

     ./manage.py syncdb
    
  2. 然后运行evolve:

     ./manage.py evolve --hint
    
  3. 执行evolve:

     ./manage.py evolve --hint -x
    
  4. 重置django evolution:

     ./manage.py reset django_evolution
    
  5. 运行syncdb:

     ./manage.py syncdb
    
  6. 现在,更改新模型的模型文件并再次运行所有步骤。

    我希望这会对你有所帮助。

答案 3 :(得分:0)

另请检查您的admin.py文件,second part of the Django tutorial是否对其进行了硬编码。