带South和django 1.7迁移的可重用应用升级路径

8 投票
3 回答
1300 浏览
提问于 2025-04-17 23:34

或者说:Django 1.7的用户还能继续使用South吗?

我负责维护一个可以重复使用的应用。我们的政策是始终支持最新的两个Django版本。我们有一套很完整的South迁移文件,并且我们希望在未来支持新的Django 1.7迁移系统。

我现在困惑的是,怎样才能让开发者在使用我的应用时,既能支持Django 1.6(和South),又能支持Django 1.7(新的迁移系统)。

Django的文档建议直接删除所有之前的South迁移文件。但这对我来说不行,因为我需要保留这些文件给使用Django 1.6的用户。

我能想到的最接近的升级方案是,在我的应用中不使用新的迁移系统,直到我不再支持Django 1.7以下的版本(也就是等到Django 1.8发布的时候)。但是,关于迁移命令的名称冲突怎么办呢?因为South和新的系统都使用python manage.py migrate来运行迁移。所以Django 1.7的用户就不能再使用South了吗?

3 个回答

0

我觉得你运气不错,如果你去看看这个Kickstarter页面,你会看到它的资金已经达到了£17,952,这笔钱可以支持7000多个任务,包括:

将一些重要功能移植到South的新版本,以支持使用Django 1.4和1.5的用户。

所以如果你愿意的话,可以把你的1.6版本的South升级到至少能和Django的迁移功能相匹配。我知道这不是你最初想要的,但看起来这是唯一的办法。

2

在Django和South中都有一些设置,可以让你指定迁移的模块。简单来说,你有两个选择:

  • 把Django 1.7的迁移文件放到一个新文件夹里,并告诉使用Django 1.7的用户,他们需要把设置为这个新文件夹。
  • 把South的迁移文件移动到一个新文件夹,并告诉使用South的用户,你的应用有了新版本,但不再兼容旧版本,他们需要把设置为这个新文件夹,才能继续使用。

这里有一篇文章大致讲的就是这些内容。此外,还有一个应用,已经做了改动以支持South和Django 1.7。

7

South 1.0 提供了解决方案。它会先在一个叫 south_migrations/ 的文件夹里查找,如果找不到,就会去 migrations/ 文件夹里找。所以对于你提到的那些需要支持旧版和新版 Django 的第三方库来说,你可以把 South 的文件移动到 south_migrations/ 文件夹里,然后在 migrations/ 文件夹里创建新的 1.7 版本的迁移文件。

South 不能和 Django 1.7 一起使用,但这对最终用户来说并不是问题。他们可以选择使用新的 Django,或者使用旧版的 Django 搭配 South 1.0。并且不会有 South 2.0 版本,因为原本计划要把新的 1.7 风格的迁移功能移植到旧版本中。此外,@Ondrej 的回答是正确的,只是那是在 South 1.0 发布之前写的,所以当时的情况(几个月前)只有一些变通的方法。

撰写回答