django 1.6.5中不存在列

时间:2015-03-30 10:49:25

标签: python django database syncdb

我在Django 1.6.5中有一个应用程序。我有一个模型,我删除了一个字段,我添加了另一个字段,第三个升级。当我们现在转向管理面板中的模型时,我收到消息:

ProgrammingError at /admin/app/subscription/
column app_subscription.enabled does not exist

命令python manage.py syncdb不起作用。

2 个答案:

答案 0 :(得分:2)

Django(希望)如果您没有明确地要求,则不会修改您的数据库架构。 syncdb命令运行正常,但(如文档所述)它只会创建尚未存在的表(并且未标记为在models外部进行管理)。

所以你这里有三个选择:

  1. 手动删除您的表并重新运行syncdb。这意味着您将丢失我们的所有数据,因此它几乎不是一个解决方案"
  2. 手动更改数据库架构。您不会丢失数据,但是在部署应用程序的任何地方都必须重复相同的(手动)操作...如果它只安装在本地工作站上可能没问题,否则它不是一个可靠的专业生产级选项。
  3. 使用South(由于您有migrate命令,因此似乎已安装。
  4. 请注意,解决方案#3意味着您确实为应用创建了迁移文件,如下所示:http://south.readthedocs.org/en/latest/tutorial/part1.html#the-first-migration

答案 1 :(得分:0)

碰巧我遇到了与django 1.9.x相同的问题,我在我的django应用程序中添加了一个新字段,触发了与上面提到的相同的错误。 我使用

登录dbshell环境
python manage.p dbshell # I know some use ./manage.py

并通过在dbshell中运行以下命令删除所有表来删除表

your_psql=# drop schema public cascade;

这会丢弃你的所有表(小心你可能会丢失你的数据,在那里保存数据!)并且你会在执行这个命令之后立即得到一条消息告诉你所有的表都被删除了。在此之后运行以下命令再次创建架构,否则您的服务器将无法运行:

your_psql=# create schema public;

然后就做

python manage.py makemigrations # you might not need this, and 
python manage.py migrate

你准备好了。

我知道这个答案可能会很晚,但我希望它会对某人有所帮助。

干杯