正如 Daniel Roseman 所提到的,syncdb
不会修改现有表。
为此,您需要使用south
http://south.aeracode.org/
将现有应用程序转换为使用south
. 首先,您可以easy_install
通过键入来安装它easy_install South
。如果您希望从 Mercurial 或快照 tar.gz 安装它,他们在此处提供了说明。
安装后,您需要将现有应用程序转换为使用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
根据文档,这是必需的,因为 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 的文档位于此处。