Django中的关系不存在错误

Nor*_*ora 13 python django

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

我创建了一个名为“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()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

django.db.utils.ProgrammingError:关系“usermanagement_clubofficial”不存在第1行:插入“usermanagement_clubofficial”(“姓名”,“电子邮件”)...

下面是模型代码:

class ClubOfficial(models.Model):

    name = models.CharField(max_length=254)
    email = models.EmailField(max_length=254)
Run Code Online (Sandbox Code Playgroud)

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

有谁知道会出什么问题?

感谢您的时间!

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

Man*_*ssi 15

我遇到了这个。在我来说,我有一个以前的工作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.
Run Code Online (Sandbox Code Playgroud)

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

./manage.py makemigrations
./manage.py migrate
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

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)
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我的模型名称在迁移中无处可见。我在我的 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...
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在迁移文件夹下添加 __init__,py 为我完成了这项工作。谢谢。 (5认同)

Awe*_*ame 5

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

$ python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

$ python manage.py migrate
Run Code Online (Sandbox Code Playgroud)