【问题标题】:Relation does not exist error in DjangoDjango中的关系不存在错误
【发布时间】:2018-03-05 14:29:51
【问题描述】:

我知道有很多关于这个问题的问题,我查看了解决方案,但不幸的是,没有一个对我有用。

我创建了一个名为“usermanagement”的新应用,并向该应用添加了一个模型。添加模型后,我在设置中将用户管理添加到 INSTALLED_APPS。然后我运行了 python manage.py makemigrations 和 python manage.py migrate。这一切都很好!我也尝试过使用 app-name 运行迁移。

当我尝试将模型的新实例添加到 Python-Django shell 中的数据库时,问题就开始了:

>>>a = ClubOfficial(name="randomName", email="randomemail@random.com")
>>>a.save()

我收到以下错误:

django.db.utils.ProgrammingError: 关系 “usermanagement_clubofficial”不存在 LINE 1: INSERT INTO "usermanagement_clubofficial" ("name", "email") ...

以下是型号代码:

class ClubOfficial(models.Model):

    name = models.CharField(max_length=254)
    email = models.EmailField(max_length=254)

如果有帮助,我使用 postgresql,并尝试重新启动服务器。该程序中的其他应用程序也可以正常工作,只是 usermanagemenet 有这个问题。

有谁知道可能出了什么问题?

感谢您的宝贵时间!

注意:我现在用不同的名称创建了一个新应用,从用户管理中复制粘贴了一些内容,一切正常。我认为问题可能是在有一个名为 usermanagement 的应用程序被删除之前,在我再次创建它之前。也许这以某种方式弄乱了数据库。

【问题讨论】:

  • 您是否使用应用名称运行makemigrations
  • ok,模型ClubOfficial存放在哪个文件中?
  • 抱歉这些愚蠢的问题。您是否已经检查了迁移文件夹中的最后一个文件?
  • 查看内部0001_initial,看到ClubOfficial的型号了吗?
  • @user3257736 python manage.py showmigrations 的结果是什么?您的应用程序的 0001_initial 之前是否有刻度?

标签: python django


【解决方案1】:

我遇到了这个。在我的情况下,我有一个以前工作的 django 应用程序,尚未投入生产,所以我删除了应用程序迁移文件夹中的 everything,然后使用 django 扩展我擦除了 postgresql 数据库和缓存文件:

./manage.py clear_cache
./manage.py clean_pyc
./manage.py reset_schema
./manage.py reset_db
# then deleted all files (including __init__.py) from my app's migrations folder.

我确认我的 postgresql 数据库没有表。然后我跑了:

./manage.py makemigrations
./manage.py migrate

它给出了输出:

No changes detected
./manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  (about 11 more lines of output here which are similar)

值得注意的是,我的模型名称在迁移中无处可寻。我在我的 postgresql 数据库中打印了这些表,并且 Widget 和 Section 表都丢失了。运行应用程序给了我这个错误(我用 'app' 和 'model' 代替了他们的真实姓名):

ProgrammingError at /my_path
relation "app_model" does not exist
LINE 1: ..."."my_field", "app_model"."my_field" FROM "appname...

所以模型的表没有在数据库中创建。我的应用程序的迁移文件夹也完全是空的。解决方案是在我的应用程序的迁移文件夹中添加一个空的__init__.py,然后运行makemigrations 能够在文件夹中创建和保存迁移文件。然后可以使用migrate 执行此操作。您可以通过在 migrations/ 文件夹中运行 makemigrations 和不使用 __init__.py 来自行测试。

这个解决方案不是我的,而是用户Ljubitel 在另一篇文章中给出的解决方案,但它不是那里接受的答案,但接受的答案对我不起作用,所以我在这里写了这个解决方案,希望能帮助其他人。

【讨论】:

  • 在迁移文件夹下添加 init,py 为我完成了这项工作。谢谢。
  • 是的,也为我工作。我的问题是 apps.config 没有正确命名,因此没有创建迁移。重命名后,我添加了带有 init.py 的迁移文件夹,运行 makemigrations,然后迁移。谢谢
【解决方案2】:

我遇到了同样的问题,但我所要做的就是运行

$ python manage.py makemigrations

$ python manage.py migrate

【讨论】:

    【解决方案3】:

    如果您删除了迁移文件夹。 在您创建的任何app name 中创建一个名为migration 的文件夹,然后在名为__init__.py 的迁移文件夹中创建一个文件

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2016-07-05
      • 2014-11-07
      • 2021-10-26
      • 2013-12-21
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多