1

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

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

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

4

2 回答 2

2

如果您没有明确要求,Django(希望)不会修改您的数据库模式。该syncdb命令完美运行,但(如记录)它只会创建尚不存在的表(并且未标记为在您的外部管理models)。

所以你在这里主要有三个选择:

  1. 手动删除表并重新运行syncdb. 这意味着您将丢失我们所有的数据,因此这几乎不是“解决方案”
  2. 手动更改您的数据库架构。您不会丢失数据,但您必须在部署应用程序的任何地方重复相同的(手动)操作......如果它只安装在您的本地工作站上可能没问题,否则它不是可靠的专业生产 -水平选项。
  3. 使用South(似乎已安装,因为您确实有migrate可用的命令。

请注意,解决方案 #3 意味着您确实为您的应用程序创建了迁移文件,如此处所述:http: //south.readthedocs.org/en/latest/tutorial/part1.html#the-first-migration

于 2015-03-30T11:06:12.407 回答
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

你准备好了。

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

干杯

于 2016-05-10T06:49:37.097 回答