Django reset_序列在LiveServerTestCas中不起作用

2024-06-09 01:54:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

这在django1.6中可以正常工作,但是在迁移到1.8之后会出现问题。在

我应该手动重置序列吗?在

另外,我知道fixture,但我的模型更复杂,对我来说,用代码创建模型更容易。在


Tags: django方法代码模型selftruedef序列
1条回答
网友
1楼 · 发布于 2024-06-09 01:54:14

问题出在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,现在它正常工作了

相关问题 更多 >