Django - 在其依赖项之前应用迁移

Django - Migration is applied before its dependency

我正在做一个 Django 项目,遇到了同事帮助我克服的一些问题。然而,当我们调查这个问题时,她删除了一个迁移,因为它似乎引起了一些问题。最后,问题与此无关,但她现在离开了公司。

项目看起来不错,直到我尝试将更改应用到模型和 运行 "makemigrations" 和 "migrate",并看到一些错误,指出 Migration <migration_name> is applied before its dependency <migration2> on database 'default' .

根据我在网上看到的和我同事告诉我的,我决定删除本地数据库和迁移并重新做。但是当我尝试从头开始进行迁移时,出现了一些错误,我尝试在我们的生产服务器中恢复迁移并将它们复制到我的本地项目,以便迁移它们而不是在我的本地项目上生成它们。

但是,我仍然无法 运行 项目正常运行,即使使用了从生产服务器获得的 "good" 迁移,它仍然说在其依赖项之前应用了迁移。我尝试使用

单独迁移每个迁移

python manage.py migrate project_name migration_name

但它说的是完全相同的错误,所以我不知道是我的语法不正确还是我不理解什么。你会推荐我做什么,或者我所做的可能有什么问题?我对 Django 比较陌生,所以我不知道该去哪里找了。

确实必须以正确的顺序应用迁移,此顺序由迁移文件中 Migration class 的 dependencies 属性指示。

有时,由于各种原因(通常是因为在两个不同的分支中创建了两个迁移),此属性的值最终会出错。简单来说,正确的解决方案是检查错误消息中指示的迁移文件(以及可能之间的一些迁移等)并手动更正每个文件的依赖关系,以便您恢复到一致的顺序。

我已经 运行 参与其中,而我的迁移确实有一个看似合乎逻辑的顺序。

就我而言,这是由数据库和代码不同步造成的。当使用多个环境分支(例如,一个用于生产,另一个用于 development/staging/testing)时,这种情况经常发生。

解决问题并能够例如创建合并迁移我不得不将我的本地数据库重置为完全空的状态(当然是在创建备份之后)。

顺便说一句。 ./manage.py flush 不行!这只会清空数据库但会保留架构。我不得不完全删除数据库并重新创建它。例如。对于 Postgres dropdb <dbname>createdb <dbname>