Django 1.3和South迁移

6

我有一个现有的项目,它广泛地使用South迁移将数据加载到其表中。

自从升级到Django 1.3以来,我们的单元测试无法运行,因为它们找不到所依赖的数据。

  1. 这种行为是否是由于1.3中的一项不兼容的更改引起的?
  2. 是否有一种简单的方法可以将所有这些迁移转换为夹具?

你可以尝试在每个应用程序目录中删除“迁移”文件夹并运行./manage.py schemamigration app --initial命令。但是请先备份所有内容,因为这可能有用也可能没用。 - Zhehao Mao
这对我的单元测试有效,但会破坏我的生产系统! - Craig Blaszczyk
2个回答

3
  1. 是的,这种行为是由于此更改引起的。

    在South trunk中似乎有一个解决方法(参见https://bitbucket.org/andrewgodwin/south/changeset/21a635231327),所以您可以尝试使用South开发版本(根据我的经验,它非常稳定)。

  2. 您可以尝试在设置中更改数据库名称(以获得干净的环境),运行./manage.py syncdb./manage.py migrate,然后执行./manage.py dumpdata


截至2012年1月19日,仍然没有包含该修复程序的South版本发布,但您可以通过以下方式从主干安装South:pip install hg+https://bitbucket.org/andrewgodwin/south但是,据我所知,这并不能解决问题... - hwjp

0
今天我遇到了这个问题。最终,我重构了我的迁移,使它们使用帮助函数来实际插入数据,然后从我的测试的setUp()中调用相同的函数。
一些提示:
- 让你的帮助函数将模型类作为参数,这样你可以从迁移中使用orm['yourapp.YourModel']调用它们,从测试中使用models.YourModel调用它们。这也显示了主要限制:South适用于其模式已更改的模型,测试代码无法做到这一点。我很幸运,因为这个特定的模型没有改变。 - 如果你想将帮助方法保留在迁移中,你会发现你不能直接导入yourapp.migrations.0001_some_migration,因为标识符不能以数字开头。使用类似于而不是import语句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接