带South和django 1.7迁移的可重用应用升级路径
或者说: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 个回答
我觉得你运气不错,如果你去看看这个Kickstarter页面,你会看到它的资金已经达到了£17,952,这笔钱可以支持7000多个任务,包括:
将一些重要功能移植到South的新版本,以支持使用Django 1.4和1.5的用户。
所以如果你愿意的话,可以把你的1.6版本的South升级到至少能和Django的迁移功能相匹配。我知道这不是你最初想要的,但看起来这是唯一的办法。
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 发布之前写的,所以当时的情况(几个月前)只有一些变通的方法。