【问题标题】:Django 1.3 and South migrationsDjango 1.3 和南迁移
【发布时间】:2011-09-28 21:43:50
【问题描述】:

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

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

  1. 这种行为是否是由于 1.3 中的 one of the backwards incompatible changes 造成的
  2. 是否有一种简单的方法可以将所有这些迁移转换为固定装置?

【问题讨论】:

  • 您或许可以尝试删除每个应用程序目录中的migrations 文件夹并运行./manage.py schemamigration app --initial?首先备份所有内容,因为这可能有效,也可能无效。
  • 这适用于我的单元测试,但会破坏我的生产系统!

标签: django unit-testing fixtures django-south


【解决方案1】:
  1. 是的,这种行为是由于这种变化。

    South trunk 中似乎有一种解决方法(请参阅https://bitbucket.org/andrewgodwin/south/changeset/21a635231327),因此您可以尝试 South 开发版本(根据我的经验,它相当稳定)。

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

【讨论】:

  • 截至 2012 年 1 月 19 日,还没有带有该修复程序的南方版本,但您可以从主干 pip install south 使用:pip install hg+https://bitbucket.org/andrewgodwin/south 但是 - 据我所知,它并不能解决问题......
【解决方案2】:

我今天遇到了这个问题。最终我最终重构了我的迁移,以便它们使用辅助函数来实际插入数据,然后从我的测试的 setUp() 中调用相同的函数。

一些提示;

  • 使您的辅助函数将模型类作为参数,因此您可以使用迁移中的 orm['yourapp.YourModel'] 和测试中的 models.YourModel 调用它们。这也显示了主要限制:South 适用于其架构从那时起发生变化的模型,测试代码无法做到这一点。我很幸运,这个特定的模型没有改变。

  • 如果你想将辅助方法保留在迁移中,你会发现你不能直接导入 yourapp.migrations.0001_some_migration 因为标识符不能以数字开头。使用 migration_0001 = importlib.import_module('yourapp.migrations.0001_some_migration') 之类的东西来代替 import 语句。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2012-06-05
    • 2019-02-14
    • 2014-05-02
    • 2014-06-22
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多