【发布时间】:2014-12-13 16:05:18
【问题描述】:
我正在尝试将使用 LiveServerTestCase 进行测试的现有 django 1.6 项目移植到 django 1.7。我已将 initial_data 固定装置转换为数据迁移。当我这样做时,我的所有实时服务器测试都失败了,因为数据正在被刷新。然后我偶然发现了 TransactionTestCase 的 serialized_rollback 选项,并将其添加到我的测试类中。但是现在我在运行测试时遇到以下错误:
sqlite3.IntegrityError: UNIQUE constraint failed: django_content_type.app_label, django_content_type.model
我在此处的示例应用中复制了该问题:https://github.com/tctimmeh/djangomigrate
型号:
class SomeData(Model):
value = IntegerField()
数据迁移:
def createData(apps, schema_editor):
SomeData = apps.get_model('mtestapp', 'SomeData')
db_alias = schema_editor.connection.alias
SomeData.objects.using(db_alias).bulk_create([
SomeData(value = 1),
])
class Migration(migrations.Migration):
dependencies = [
('mtestapp', '0001_initial'),
]
operations = [
RunPython(createData)
]
还有测试:
class TestIt(TransactionTestCase):
serialized_rollback = True
def test_one(self):
self.assertEqual(1, SomeData.objects.all().count())
def test_two(self):
self.assertEqual(1, SomeData.objects.all().count())
其中一项测试通过了。另一个引发了上述 IntegrityError。知道为什么会这样吗?
编辑:我对其进行了深入研究,看起来 django.contrib.contenttypes 应用程序有一个 post_migrate 管理命令,该命令在刷新测试数据库后运行。有没有办法阻止该命令运行?
【问题讨论】:
标签: python django sqlite data-migration