Django:psycopg2.errors.UndefinedColumn:"pages_page" 关系的列 "page_image" 不存在

Django: psycopg2.errors.UndefinedColumn: column "page_image" of "pages_page" relation does not exist

这是一个简短的背景故事。我正在为 Django 使用 Mezzanine CMS。我创建了一些继承自夹层模型的模型。这导致我的 Postgres 数据库出现问题,其中一个对象出现在两个 table 中。当我尝试在我的站点中搜索 post 时,我不会从 table.

中获得结果

所以,这就是我认为我搞砸了的地方。我将我的模型恢复到这个问题之前的状态。这意味着我的数据库中仍然有那些模型的 table,所以我的搜索功能仍然无法使用。我希望这种关系消失,所以我做了一些非常愚蠢的事情并删除了整个数据库。这对我的本地开发来说很好,因为我只是重新创建了数据库并进行了迁移。

当我尝试使用新创建的 postgres 数据库将我的这个项目部署到 DigitalOcean 上时,我得到了这个命令:
$ python manage.py createdb --nodata --noinput 这给了我错误:

psycopg2.errors.UndefinedColumn: column "page_image" of "pages_page" relation does not exist
LINE 1: UPDATE "pages_page" SET "page_image" = '', "keywords_string"...

我查了几个关于这个错误的线程,并尝试了这个 没有用:

python manage.py shell

>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()

错误LINE 1: UPDATE "pages_page" SET "page_image" = '', "keywords_string"...中的建议我也试过了。奇怪的是,我在 运行 此命令之前看到 pages_page table 内的 page_image 列。

我不知道什么代码对这种情况有帮助。我不知道如何解决这个问题。我该如何进一步解决我的这个问题?

我解决了这个问题。它与 settings.py 文件中的 EXTRA_MODEL_FIELDS 选项有关。我仍然不确定为什么会导致问题,但这是我的 EXTRA_MODEL_FIELDS 代码:

EXTRA_MODEL_FIELDS = (
     (
...,
     (
        "mezzanine.pages.models.Page.page_image",
        "ImageField",
        (_("Featured Image"),),
        {"blank": True, "upload_to": "uploads/blog"},   
     ),
...
 )

我所做的导致我的问题消失的如下所列:

  • 我部署的 createdb --nodata --noinput 命令被注释掉了。
  • 我继续部署过程
  • 一旦我开始部署网站,我就再次 运行 迁移
  • page_image 列已自动添加

现在一切正常!我不知道这个答案可能有多大帮助,但如果有人想讨论他们的问题,我总是可以更深入地讨论。