1

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

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

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

4

4 回答 4

3

syncdb不修改现有表。

于 2012-10-08T17:01:53.390 回答
1

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

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

将现有应用程序转换为使用south. 首先,您可以easy_install通过键入来安装它easy_install South。如果您希望从 Mercurial 或快照 tar.gz 安装它,他们在此处提供了说明。

安装后,您需要将现有应用程序转换为使用south. 在应用程序的settings.py文件中,添加southINSTALLED_APPS然后重新运行python manage.py syncdb. 所有这些都是为south应用程序添加数据表。它还没有对你的模型做任何事情。

现在,您要撤消在原始帖子中所做的更改。回到过去的样子。我们将在几分钟内进行更改,但首先,我们需要说明您的应用程序现在south的样子。

python manage.py convert_to_south <appname>替换<appname>为您的应用程序的名称。这将为您的应用程序创建初始迁移文件。

将这些更改提交到您的版本控制(或通过您的正常流程将应用程序分发给您的其他开发人员)。它应该是migrations在您的应用程序目录中命名的新文件夹。您将需要提交/分发此文件夹中出现的所有文件。

一次性的事情:安装应用程序的任何地方都需要运行此命令以转换为使用 south。python manage.py migrate <appname> 0001 --fake根据文档,这是必需的,因为 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 的文档位于此处

于 2012-10-08T18:17:32.117 回答
1

如果没有任何效果,请尝试删除模型文件中的模型,然后使用 django Evolution 并尝试在重置 django_evolution 之后使用 django Evolution,然后在所有这些尝试再次更改您的模型文件后再次运行这些步骤,我希望这能解决问题,它在我的情况下工作......

以下是步骤:

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

  1. 然后运行同步数据库。

     ./manage.py syncdb
    
  2. 然后运行进化:

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

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

     ./manage.py reset django_evolution
    
  5. 运行同步数据库:

     ./manage.py syncdb
    

现在,将模型文件更改为新模型并再次运行所有步骤。

我希望这能帮到您。

于 2014-09-19T04:59:09.497 回答
0

还要检查您的 admin.py 文件,Django 教程的第二部分让您对其进行硬编码。

于 2014-06-22T20:52:12.347 回答