情况:我正在从事的项目的文件损坏或其他原因。模型是最新版本,但是必须在添加/删除/修改某些列之前回滚SQLite DB。迁移文件都消失了。尝试重新创建迁移会导致新的列出现在初始迁移文件中,因此我既不能进行真实迁移(由于存在表),也无法进行伪造(因为数据库中缺少这些列)。
在这种情况下,如何进行初始迁移以匹配数据库中当前存在的列,以便我可以对其进行伪造,然后进行真正的第二次迁移以使表与模型一致?想到的唯一一件事就是手动调整模型以匹配数据库模式,进行初始迁移,伪造它,然后还原新版本的模型,但是我更喜欢自动完成。
答案 0 :(得分:1)
django inpsectdb来营救。
但是首先,如果您使用了正确的版本控制,请学习如何使用git,现在您将不会遇到这个困难。
第一步,将代码添加到版本控制中。
删除现有模型文件
使用inspectdb从数据库中的表中生成一个models.py。这不是完美的,您必须手动编辑文件,并且可能必须手动将其散布在不同模型文件之间。
现在删除迁移表的内容
执行./manage.py makemigrations(yourapp)
进行您提到的虚假迁移
将生成的models.py替换为当前的models.py(对该文件进行git checkout可以很好地完成技巧)
进行一次迁移,然后再次迁移。
祝你好运。