陷入django迁移IntegrityError循环:我可以删除那些尚未包含在db中的迁移吗?

时间:2016-09-21 04:03:50

标签: python django

因此,我提交并推送了所有代码,然后成功部署了我的Web应用程序。然后,我在我的“主页”应用程序中添加了一个新模型(由于我现在理解的原因,但这里无关紧要),创建了IntegrityErrordjango.db.utils.IntegrityError: insert or update on table "foo" violates foreign key constraint "bar")。我运行python manage.py makemigrationspython manage.py migrate,这会导致IntegrityError

但是,即使我删除了所有新的模型代码(因此git status没有任何内容),仍然会发生IntegrityError。如果我通过不同的python实例连接到我的数据库并下载select * from django_migrations;,最新的数据库迁移: 0020 ,我的最新本地home/migrations迁移文件有八次迁移: 0028

- >我的问题是:我删除本地 0021-0028 迁移文件是否安全?这会解决我的问题吗?

2 个答案:

答案 0 :(得分:2)

如果您尚未将迁移应用于db,则可以安全地删除它们并重新创建它们。

您遇到此错误的原因可能是:

  1. 您删除了模型代码,但是当您运行migrate时,它会读取您的迁移文件(其中包含有关已删除模型的信息)并尝试应用迁移操作。如果在删除模型后没有运行makemigrations命令,迁移系统将无法检测到您的更改,并认为您的模型仍然存在。
  2. 即使您在删除模型后运行makemigrations,迁移文件中也会存在依赖性问题,因为新的迁移文件将取决于旧的迁移文件(您遇到问题)< / LI>

    这就是为什么我们可以说删除它们是安全的,如果它们没有应用,但同时你应该小心你的迁移依赖。

    documentation信息可能有用。

答案 1 :(得分:0)

好的,所以我交叉了手指,支持我的本地0021-0028迁移文件,然后将其删除。 有效。我认为他们的关键是迁移文件尚未在数据库中,但不是100%肯定。 +1,如果有人可以进一步回答澄清。