因此,我提交并推送了所有代码,然后成功部署了我的Web应用程序。然后,我在我的“主页”应用程序中添加了一个新模型(由于我现在理解的原因,但这里无关紧要),创建了IntegrityError
(django.db.utils.IntegrityError: insert or update on table "foo" violates foreign key constraint "bar"
)。我运行python manage.py makemigrations
,python manage.py migrate
,这会导致IntegrityError
。
但是,即使我删除了所有新的模型代码(因此git status没有任何内容),仍然会发生IntegrityError。如果我通过不同的python实例连接到我的数据库并下载select * from django_migrations;
,最新的数据库迁移: 0020 ,我的最新本地home/migrations
迁移文件有八次迁移: 0028
- >我的问题是:我删除本地 0021-0028 迁移文件是否安全?这会解决我的问题吗?
答案 0 :(得分:2)
如果您尚未将迁移应用于db,则可以安全地删除它们并重新创建它们。
您遇到此错误的原因可能是:
migrate
时,它会读取您的迁移文件(其中包含有关已删除模型的信息)并尝试应用迁移操作。如果在删除模型后没有运行makemigrations
命令,迁移系统将无法检测到您的更改,并认为您的模型仍然存在。 makemigrations
,迁移文件中也会存在依赖性问题,因为新的迁移文件将取决于旧的迁移文件(您遇到问题)< / LI>
醇>
这就是为什么我们可以说删除它们是安全的,如果它们没有应用,但同时你应该小心你的迁移依赖。
此documentation信息可能有用。
答案 1 :(得分:0)
好的,所以我交叉了手指,支持我的本地0021-0028迁移文件,然后将其删除。 有效。我认为他们的关键是迁移文件尚未在数据库中,但不是100%肯定。 +1,如果有人可以进一步回答澄清。