首页 > 解决方案 > Django 迁移已应用,但我没有迁移文件

问题描述

向数据库应用了迁移,并且表“blacklist_id”存在(并填充了行。)

我想添加一个新模型并进行迁移,但是每当我调用 makemigrations 时,Django 都认为 blacklist_id 模型是新的并尝试为此进行迁移,这会导致错误。

我不想从服务器中删除表,因为它有数据 - 我能做什么?

标签: pythondjango

解决方案


表是在没有最初创建迁移文件的情况下创建的,这有点奇怪,但我假设表是在 Django 之外创建的,或者文件可能被意外删除。

可能有帮助的解决方案是为此特定应用程序创建迁移,其中包含blacklist_id(例如python manage.py makemigrations blacklist_app:)

然后应用虚假迁移:python manage.py migrate --fake

这将简单地创建迁移文件,然后将其标记为已创建,而不实际创建对数据库的更改(更多信息在这里

第二个解决方法(它不是那么漂亮)是创建另一个类,具有与表完全相同的字段blacklist_id但名称不同(您可以在任何地方甚至在单独的应用程序中创建它),makemigrations然后编辑迁移文件以更改表的名称,最后将这个迁移文件(或只是 的操作migrations.CreateModel(...))注入到您的应用程序中,最后migrate --fake再次使用,因此它将被添加到您的迁移中,并标记为已执行,而您的数据库中没有任何更改。


推荐阅读