Django中不存在关系错误

w7t8yxp5  于 2022-12-24  发布在  Go
关注(0)|答案(4)|浏览(170)

我知道有很多关于这个问题的问题,我看过的解决方案,不幸的是没有一个为我工作。
I created a new app called "usermanagement", and added a model to the app. After adding the model I added usermanagement to INSTALLED_APPS in settings. Then I ran python manage.py makemigrations, and python manage.py migrate. This all worked fine! I also did try running the migrations with the app-name.
当我尝试在Python-Django shell中向数据库添加一个新的模型示例时,问题就出现了:

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

出现以下错误:
django.db.utils.ProgrammingError:关系"用户管理_俱乐部官方"不存在行1:INSERT INTO "用户管理_俱乐部官方"("姓名","电子邮件")...
以下是型号代码:

class ClubOfficial(models.Model):

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

如果有帮助的话,我使用postgresql,并且试过重新启动服务器。程序中的其他应用程序也运行得非常好,只是usermanageminet有这个问题。
有人知道哪里出了问题吗?
感谢您抽出宝贵时间!
注:我现在用不同的名字创建了一个新的应用程序,复制粘贴了用户管理的东西,一切都很好。我想问题可能是之前有一个名为用户管理的应用程序被删除了,在我重新创建它之前。也许这在某种程度上扰乱了数据库。

cbeh67ev

cbeh67ev1#

TL;DR:请确保你的应用的migrations文件夹包含__init__.py文件。如果不存在,请将其作为空文件重新创建。

我遇到了这个问题,我之前有一个运行中的django应用,还没有进入生产状态,所以我删除了应用migrations文件夹中的 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...

所以模型的表没有在数据库中创建。我的应用的migrations文件夹也是完全空的。解决方案是在我的应用的migrations文件夹中添加一个空的__init__.py。之后,运行makemigrations就可以创建迁移文件并将其保存在文件夹中。然后,可以使用migrate执行此操作。您可以通过在migrations/文件夹中运行makemigrations(带或不带__init__.py)来自己测试这一点。
这个解决方案不是我的,而是用户Ljubitel在另一篇文章中给出的,但它不是那里的公认答案,但公认的答案对我不起作用,所以我在这里写这个解决方案,希望能帮助其他人。

6ojccjat

6ojccjat2#

我也有同样的问题,但我所要做的就是

$ python manage.py makemigrations

以及

$ python manage.py migrate
ej83mcc0

ej83mcc03#

如果已删除迁移文件夹,请在已创建的app name中创建名为migration的文件夹,然后在名为__init__.py的迁移文件夹中创建文件

iqxoj9l9

iqxoj9l94#

在我的例子中,我指向的是本地服务器和生产服务器之间的不同数据库。生产服务器指向的数据库落后了几个版本,因此服务器无法找到关系。如果您的问题局限于一个环境,请首先检查配置。

相关问题