当我尝试添加字段时,为什么Django会抛出“不存在”错误

时间:2013-04-17 23:26:06

标签: python django

目前我正在使用默认的管理门户网站,它运行正常。然后在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

我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

我建议阅读Django Book的以下章节(免费在线):
Chapter 10: Advanced Models

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

  

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

     
      
  1. 将字段添加到模型中。
  2.   
  3. 运行manage.py sqlall [yourapp]查看   模型的新CREATE TABLE语句。请注意该列   新领域的定义。
  4.   
  5. 启动数据库的交互式   shell(例如psqlmysql,或者您可以使用manage.py dbshell)。执行添加新列的ALTER TABLE语句。
  6.   
  7. 启动   带有manage.py shell的Python交互式shell并验证   通过导入模型和正确添加新字段   从表中选择(例如,MyModel.objects.all()[:5])。如果你   正确更新数据库,语句应该没有   错误。
  8.         

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

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