在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?

Posted

技术标签:

【中文标题】在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?【英文标题】:What is the recommended way to run South migrations before Django 1.7 migrations?在 Django 1.7 迁移之前运行 South 迁移的推荐方法是什么? 【发布时间】:2014-10-29 19:34:28 【问题描述】:

我有几个项目有很多 South 迁移,包括包含大量需要以特定顺序运行的自定义 SQL 的项目。升级到 Django 1.7 后,这是关于如何将项目转换为使用 South 的建议(来自Django documentation):

如果您已经使用 South 创建了预先存在的迁移,那么使用 django.db.migrations 的升级过程非常简单:

确保所有安装都与它们的迁移完全同步。 从 INSTALLED_APPS 中删除“南”。 删除所有(编号的)迁移文件,但不要删除目录或 __init__.py - 确保也删除 .pyc 文件。 运行 python manage.py makemigrations。 Django 应该会看到空的迁移目录并以新格式进行新的初始迁移。 运行 python manage.py migrate。 Django 将看到初始迁移的表已经存在并将它们标记为已应用而不运行它们。

简而言之,“擦除您现有的迁移,其余的由 Django 处理”。

这里没有提到的是,当现有的 South 迁移不包含模型更改,而是包含需要按顺序运行的直接 SQL、数据迁移等时该怎么办.在这种情况下,自动生成的 Django 迁移会遗漏很多东西,因为并非所有这些更改都通过自检模型文件显而易见。

理想情况下,可以使用 South 运行现有迁移,然后让 Django 迁移接管。解决此问题的最佳方法可能是什么?如果这不可能或非常不推荐,那么最好的选择是什么?

【问题讨论】:

您的意思是您的迁移不能在您确定它们已在所有安装上运行之后就被废弃?您是在使用它们来提供带有初始数据或其他内容的全新安装吗? 【参考方案1】:

也许这个post 可以帮助你。基本上你必须:

    将当前迁移目录从“migrations”更改为“south_migrations”

    使用此行更新您的设置

    SOUTH_MIGRATION_MODULES = 'your_app': 'your_project.your_app.south_migrations',

【讨论】:

以上是关于在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 South 迁移到 Django 1.7 迁移:可交换依赖项

makemigrations 和升级到 Django 1.7 的问题

无法将 Django 从 1.7 迁移到 1.8

不知道为啥 django South 试图运行反向迁移

从 1.5 迁移到 1.7 时的单元测试警告

运行单元测试时禁用 Django South?