南方Django表已存在

5 投票
1 回答
1243 浏览
提问于 2025-04-16 11:34

我遇到了和这个问题一样的情况:django - "manage.py test" 失败 "表已经存在"

我的数据库迁移(schemamigration / migration)都很顺利(虽然有些问题让我需要用 --fake,但后面的迁移都没问题)。但是当我运行单元测试时,我得到了:

(1050, "Table '{tablename}' already exists")

我只是想知道我该怎么解决这个问题,以及为什么会发生这种情况。上面链接的问题中唯一的回答是说可以在单元测试中排除 south,如果我这样做,是不是就意味着我不能对 south 管理的表进行单元测试了?

非常感谢解释 :)

亚当

1 个回答

8

不,这并不是说那样。别忘了,如果你现在从头开始创建表,Django已经知道你的表应该是什么样子的——它只是使用模型定义而已。South的作用在于,当你修改模型时,它可以帮助你轻松地改变表的结构,但在运行测试的时候,你并不关心这些:你只想在当前版本的表上运行测试。

所以,是的,在运行测试时可以关闭South,方法是设置 SOUTH_TESTS_MIGRATE = False,这样Django会自动为你创建表。

撰写回答