当前位置: 代码迷 >> python >> Django迁移:不存在关系
  详细解决方案

Django迁移:不存在关系

热度:76   发布时间:2023-06-13 16:49:22.0

我的开发服务器上有一个工作站点和数据库,我正在尝试在实时服务器上进行设置。 我正在执行以下操作:

  • Git将存储库从开发服务器克隆到实时服务器
  • 在实时服务器(Posgres)上创建空数据库
  • 更新实时服务器上所有相关数据库等设置的settings.py
  • 删除所有迁移文件/文件夹并删除所有* .pyc文件
  • python manage.py makemigrations

我收到错误: django.db.utils.ProgrammingError: relation "myapp_mytable" does not exist

我似乎无法进行初始迁移。 我发现的唯一解决方案是进入我的settings.py文件并注释掉INSTALLED_APPS所有应用程序,并进入我的主urls.py文件并注释掉所有URL。

在注释掉那些部分之后,我就可以进行初始迁移了。 之后,我可以取消注释我的应用程序,并开始一个一个地迁移它们,即: python manage.py makemigrations appname然后python manage.py migrate python manage.py makemigrations appname

因此,我有一个解决方法,但这远非理想。 当然,有一种方法可以告诉django,我已经创建了一个全新的空数据库,因此它需要首先进行初始迁移。 我使用Ansible使服务器设置自动化,因此要求我执行所有此手动注释/取消注释操作和多次迁移是不好的。

更新:

根据评论,我不认为要删除迁移。 因此,我在开发服务器上进行了以下尝试来尝试重新创建它们: 。 但是,即使我现在有已复制到实时服务器的迁移文件,当我尝试运行它们时,也会遇到与上述相同的错误。

我已经阅读了迁移文件,但看不到任何有关创建初始迁移/数据库架构的内容。 它仅提及创建我的应用程序模型。 我似乎无法弄清楚在完成应用程序迁移之前如何进行初始迁移。 我需要以某种方式重新创建所有迁移文件(包括创建初始数据库模式),以便它们可以在服务器上运行。

我最终在@Daniel Roseman的评论中找到了问题。 我正在执行以下操作:

list(Correlation().get_entries())

这是在创建一个模型实例(即:Correlation)并针对此实例调用get_entries()方法。 然后,我将其包围在list()中。 由于某种原因,这阻止了迁移工作。 我删除了没有必要的list(),现在一切正常。