【问题标题】:Django admin site not displaying new column after update model更新模型后 Django 管理站点不显示新列
【发布时间】:2012-09-28 23:09:18
【问题描述】:

我对 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 管理站点没有显示新列。

当我执行所有操作时,我没有错误!请帮忙。

【问题讨论】:

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


    【解决方案1】:

    syncdb 不会修改现有表。

    【讨论】:

    • 我自己修改了db中的表。
    【解决方案2】:

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

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

    将现有应用程序转换为使用south 的快速演练。首先,您可以通过键入easy_install South 使用easy_install 安装它。如果您希望从 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

    【讨论】:

      【解决方案3】:

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

      以下是步骤:

      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. 运行同步数据库:

         ./manage.py syncdb
        

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

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        还要检查您的 admin.py 文件,second part of the Django tutorial 有您对其进行硬编码。

        【讨论】: