Django:中断的迁移

Django: broken migrations

提问人:dabadaba 提问时间:10/28/2016 最后编辑:Risadinhadabadaba 更新时间:10/28/2016 访问量:2435

问:

我正在尝试在新机器中本地设置一个 Django 应用程序,但迁移似乎完全被破坏了。它们需要按照特定的顺序执行,这在我几个月前设置环境的第一台机器中是有效的,但现在存在不一致(尽管我很确定没有生成新的迁移)。

因此,我能想到的唯一解决方案是将数据库从正在工作的旧机器导出到新机器。那行得通吗?

这不会解决损坏的迁移问题,但至少我可以处理代码,直到找到适当的解决方案。

蟒蛇 django python-2.7 django-1.4

评论

0赞 iraycd 10/28/2016
你试过了吗?如果要更改模型,则必须首先在应用程序内添加迁移包文件。但是,要自动执行此操作,您必须使用 .makemigrationspython manage.py makemigrations
2赞 Risadinha 10/28/2016
你确定你的两个安装都运行在相同的 Django 版本上吗?1.4 是旧的,仍然使用 South,而 Django >= 1.7 带来了自己的迁移系统(取代了 South)。
0赞 dabadaba 10/28/2016
是的,旧的使用 1.4,它使用南迁移。
1赞 dabadaba 10/28/2016
@iraycd似乎是一个未知的命令。我猜它是在 1.4 之后引入的。makemigrations

答:

0赞 Risadinha 10/28/2016 #1

回答这个问题:

因此,我能想到的唯一解决方案是将数据库从正在工作的旧机器导出到新机器。那行得通吗?

是的,如果您确定数据库与模型同步,则可以这样做。如果您想为更新生产环境做好最好的准备,这实际上是要走的路。

  1. 从当前生产计算机获取转储
  2. 创建新数据库并加载转储
  3. 检查模型和迁移历史之间是否存在差异(这在新的 Django 迁移中更可靠,South 是一个外部工具,并且没有所有的可能性)(例如 (1.10)、(1.7-1.9 和南部)./manage.py showmigrations./manage.py migrate --list
  4. 如果您确信无需运行任何迁移,但列表显示差异,请执行以下操作:./manage.py migrate --fake

请注意,在较新的版本中,您可以这样做,如果模型和迁移同步,它将报告一切都井井有条。在部署到生产环境之前,这可能是一次健全性检查。./manage.py migrate