我有一个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管理站点不显示新列。
当我做所有的行动时,我没有错误!请帮忙。
答案 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将您的模型文件更改为旧文件。
然后运行syncdb。
./manage.py syncdb
然后运行evolve:
./manage.py evolve --hint
执行evolve:
./manage.py evolve --hint -x
重置django evolution:
./manage.py reset django_evolution
运行syncdb:
./manage.py syncdb
现在,更改新模型的模型文件并再次运行所有步骤。
我希望这会对你有所帮助。
答案 3 :(得分:0)
另请检查您的admin.py文件,second part of the Django tutorial是否对其进行了硬编码。