我的Django测试因South的架构迁移顺序不起作用?

1 投票
2 回答
871 浏览
提问于 2025-04-16 21:24

当我运行

manage.py test myapp

时,它出现了这个错误

Creating test database for alias 'default'...
! Error found during real run of migration! Aborting.
_mysql_exceptions.OperationalError: (1005, "Can't create table 
   'test_dom.#sql-49b_1a1' (errno: 150)")

我正在使用 south 来处理数据库结构的迁移,使用的是 django 1.3 和 mysql。

需要注意的是,当我单独配置项目时,我会按照以下顺序进行操作:

  • 先执行 syncdb
  • 然后迁移 app1
  • 接着迁移 app2
  • 最后进行迁移

最后一次迁移会应用到所有其他的应用。如果我不手动对前两个应用进行迁移,south 也会崩溃。

有没有什么办法可以解决这个问题?

2 个回答

3

你知道吗?在使用south进行数据库迁移的时候,你可以定义依赖关系。

http://south.aeracode.org/docs/dependencies.html

如果你定义了这些依赖关系,那么只需要运行一次“manage.py migrate”就可以了。如果不行的话,请把错误信息发出来。

2

为什么在执行syncdb之后还要进行迁移?难道在新创建的数据库之后就没有迁移的事情了吗?

另外请注意south的设置:

SKIP_SOUTH_TESTS = True
SOUTH_TESTS_MIGRATE = False

撰写回答