Django reset_sequences 在 LiveServerTestCase 中不起作用

Nik*_*lub 5 python django unit-testing

我已将 django 从 1.6 更新到 1.8.3。我在单元测试中的 test setUp 方法中创建测试模型,类似这样

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

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

这在 django 1.6 中工作正常,但在迁移到 1.8 后出现问题。

我应该手动重置序列吗?

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

Nik*_*lub 3

问题出在 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())
    # ....
Run Code Online (Sandbox Code Playgroud)

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