0

目前我正在使用运行良好的默认管理门户。然后在models.py中我尝试添加一个字段,如下所示:

class MyModel(models.Model):
    # new field is 'info'
    info = models.CharField(max_length=100)

MyModel 已经在上面的代码中成功定义和使用了,我只想添加一个字段。我重新运行同步

python manage.py syncdb
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

但是,当我尝试使用该界面时,Django 会引发错误

column myproject_mymodel.info does not exist

我究竟做错了什么?

4

1 回答 1

3

manage.py syncdb只会创建不存在的表,它不适用于添加或删除列,或修改列。

我建议阅读 Django Book(在线免费)的以下章节:
第 10 章:高级模型

以下是该章中给出的添加字段的步骤:

首先,在开发环境中执行这些步骤(即,不在生产服务器上):

  1. 将该字段添加到您的模型中。
  2. 运行manage.py sqlall [yourapp]以查看模型的新CREATE TABLE语句。请注意新字段的列定义。
  3. 启动数据库的交互式外壳(例如,psqlmysql,或者您可以使用manage.py dbshell)。执行ALTER TABLE添加新列的语句。
  4. 启动 Python 交互式 shell,manage.py shell并通过导入模型并从表中选择来验证新字段是否已正确添加(例如,MyModel.objects.all()[:5])。如果您正确更新了数据库,则该语句应该可以正常工作。

然后在生产服务器上执行以下步骤:

  1. 启动数据库的交互式 shell。
  2. 执行ALTER TABLE您在开发环境步骤的第 3 步中使用的语句。
  3. 将该字段添加到您的模型中。如果您正在使用源代码修订控制并且您在开发环境的第 1 步中签入了您的更改,那么现在是时候更新svn update生产服务器上的代码(例如,使用 Subversion)了。
  4. 重新启动 Web 服务器以使代码更改生效。
于 2013-04-17T23:32:29.043 回答