我知道为什么当我做migrate
时,它给了我no migrations to apply
的信息,但我不知道如何解决它
这就是发生的事情。
我在模型字段中添加了一个名为update
的新字段。
我做了migration
创建了一个名为0003_xxxxx.py
的文件,然后我做了一个migrate
,现在这个工作正常。
但是由于某些原因,我必须从同一模型中删除update
字段。
所以我删除了它(更像是评论而不是真正删除代码)然后我做了migration
和migrate
删除了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
我把它移到某个地方以防万一发生这种情况。
但为什么会这样呢?有没有办法解决它?
提前感谢您的回复
答案 0 :(得分:3)
django在您的数据库中按表migrations
保留当前django_migrations
日志的记录。
迁移是一个链式结构,它取决于父节点。通过这个表,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