Django 中关系不存在错误

新手上路,请多包涵

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

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

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

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

我收到以下错误:

django.db.utils.ProgrammingError:关系“usermanagement_clubofficial”不存在第 1 行:插入“usermanagement_clubofficial”(“name”,“email”)…

下面是模型代码:

 class ClubOfficial(models.Model):

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

如果有帮助,我使用 postgresql,并尝试重新启动服务器。该程序中的其他应用程序也运行良好,只是 usermanagemenet 存在此问题。

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

感谢您的时间!

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

原文由 Nora 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 583
1 个回答

TL;DR:确保您应用程序的迁移文件夹有一个 __init__.py 文件。如果不存在,请将其重新创建为一个空文件。

我遇到了这个。在我的例子中,我有一个以前工作的 django 应用程序,尚未转移到生产环境,所以我删除 我应用程序的迁移文件夹中的所有内容,然后使用 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 表都丢失了。运行应用程序给了我这个错误(我用“应用程序”和“模型”代替了他们的真实姓名):

 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 在另一篇文章中给出的,但它不是那里接受的答案,但接受的答案对我不起作用所以我在这里写了这个解决方案希望能帮助别人。

原文由 MangoLassi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏