Django reset_sequences在LiveServerTestCase中不起作用

时间:2015-07-24 11:48:38

标签: python django unit-testing

我已将django从1.6更新为1.8.3。我在单元测试中使用测试setUp方法创建测试模型,类似

class MyTestCase(LiveServerTestCase):
    reset_sequences = True
    def setUp(self):
        self.my_model = models.MyModel.objects.create(name='test)

我在应用程序中有代码,它依赖于主键== 1.我已经注意到,序列实际上并没有被重置。在每次下一次测试中,pk都比以前更高。

这在django 1.6中运行正常,但是在迁移到1.8问题后会出现。

我应该手动重置序列吗?

P.S。我知道灯具,但我的模型更复杂,对我来说,在代码中创建模型更容易。

1 个答案:

答案 0 :(得分:2)

问题出在sqlite3上。测试已与其他设置文件一起运行,其中sqlite3配置为数据库。

如果数据库支持序列,则django会检查:

# django.test.testcases.py:809
def _reset_sequences(self, db_name):
    conn = connections[db_name]
    if conn.features.supports_sequence_reset:
        sql_list = conn.ops.sequence_reset_by_name_sql(
            no_style(), conn.introspection.sequence_list())
    # ....

所以我已经将测试设置切换到postgresql,现在它正常工作