django迁移“无需迁移。”

时间:2018-05-15 00:55:57

标签: python django migration database-migration

我知道为什么当我做migrate时,它给了我no migrations to apply的信息,但我不知道如何解决它

这就是发生的事情。

我在模型字段中添加了一个名为update的新字段。 我做了migration创建了一个名为0003_xxxxx.py的文件,然后我做了一个migrate,现在这个工作正常。

但是由于某些原因,我必须从同一模型中删除update字段。 所以我删除了它(更像是评论而不是真正删除代码)然后我做了migrationmigrate删除了db中的字段。 (创建0004_xxxxx.py

但是感叹......有些原因我必须再次添加该字段(这就是为什么我只注释掉了)但在我做migration之前 我删除了我想删除这两个文件的0003_xxxx.py and 0004_xxxx.py个文件,因为这实际上与0003_xxxx.py的配置相同或几乎相同,所以我觉得这里的0003_xxxx.py and 0004_xxxx.py也没有意义...当我开始制作时,这只是python运行的另一个额外步骤。

删除这两个文件后,我执行migration创建了另一个0003_xxxx.py,但当我migrate时,它会给我no migrations to apply

的消息

我知道通过删除0003_xxxx.py并获取原始0003 and 0004然后再做migration (creates 0005_xxxx.py) then migrate,然后会进行更改。我知道这是因为我并没有真正删除原来的0003 and 0004我把它移到某个地方以防万一发生这种情况。

但为什么会这样呢?有没有办法解决它?

提前感谢您的回复

3 个答案:

答案 0 :(得分:3)

django在您的数据库中按表migrations保留当前django_migrations日志的记录。

像这样的东西: enter image description here

迁移是一个链式结构,它取决于父节点。通过这个表,django可以知道哪个迁移文件被执行。

在您的情况下,no migrations to apply因为新的创建0003_xxxx.py是此表中的记录,您可以通过删除此表中的此记录来修复它。

如果要删除某些迁移文件,则需要查看Squashing migrations

答案 1 :(得分:1)

或者甚至只是从数据库中删除最后一个迁移行,您都可以尝试以下操作

首先,检查要删除的行

SELECT * FROM "public"."django_migrations";

现在从上述查询中选择最后一个id并执行

DELETE FROM "public"."django_migrations" WHERE "id"=replace with your Id;

运行./manage.py migrate

答案 2 :(得分:0)

只需运行:

python manage.py run --run-syncdb