Django中的关系不存在错误

时间:2017-09-24 14:51:25

标签: 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()

我收到以下错误:

  

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)

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

有谁知道会出现什么问题?

感谢您的时间!

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

3 个答案:

答案 0 :(得分:1)

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

$ python manage.py makemigraions

$ python manage.py migrate

答案 1 :(得分:0)

我遇到了这个。就我而言,我有一个以前使用过的django应用程序,尚未移至生产环境,因此我删除了我应用程序的migrations文件夹中的一切,然后使用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来自己进行测试。

此解决方案不是我的,而是用户 std::cout << " Test Bar endcap " << BarEndCap << std::entl; 在另一则帖子上提供的解决方案,但不是那里的已接受答案,但是已接受的答案对我不起作用,因此我在此处编写此解决方案以希望对其他人有所帮助

答案 2 :(得分:-2)

只需从pgAdmin中删除数据库=首先断开数据库连接,然后删除它。 然后使用与以前相同的名称再次创建数据库。删除删除迁移中的所有文件。 然后运行所有迁移命令,然后运行runserver。 您的代码是调试享受:)