正如 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。