关于django:迁移到现有数据库而不匹配迁移

Migrating to existing database without matching migration

我正在Django1.9.8的一个网站上工作,并尝试将它的更新版本部署到服务器上以演示它。

随着我在开发中学习Django,我犯了几次错误:当遇到数据库问题时,删除迁移并创建新的迁移。当我能够删除一个现有的数据库时,这在我的开发人员身上很好地工作,但是在尝试在不丢失现有数据库数据的情况下将其部署到演示服务器上时,会导致一些问题。

我在演示服务器上没有现有数据库模式的迁移,当我运行manage.py makemigration 时,它会为应用程序创建初始迁移。当我试图运行manage.py migrate 时,它告诉我表已经存在(因为迁移试图添加所有这些表,而不是在数据库上进行所需的修改)。

是否有一种基于当前数据库创建初始迁移的方法,然后我可以运行makemigrations以获取将当前数据库修改为当前模型最新的迁移?

应用程序如果这已经在某个地方得到了回答,我已经找过了,也没有幸运地找到答案。

谢谢!


Django认为迁移已经运行,因为Django_迁移表中有迁移条目。这就是Django注册已经完成的迁移的地方。您需要进入postres并删除那些您不想要的迁移的行。这假设您的db模式与models.py匹配。如果存在差异,则需要手动编辑迁移文件以消除任何差异,或者临时修改models.py以匹配。

1
2
psql [db name]
delete from django_migrations;

现在删除应用程序中的所有迁移文件夹并运行:/manage.py迁移--假首字母

如果您的models.py或migrations被编辑为与当前的db模式匹配,并且您现在希望对差异运行迁移,请运行./manage.py makemigrations,然后迁移。

另请参见:django 1.8:为现有模式创建初始迁移