Django 使用 SqlLite3 在测试模型中测试自定义字段;无法禁用约束检查来创建数据库表

问题描述 投票:0回答:1

我需要为可以访问数据库的自定义字段编写测试。 代码如下:

class TestMyField (TestCase):
    def SetUpClass(cls):
       super().setUpClass()
       class MyModel(models.Model):
            class Meta:
                app_label = 'test_app'

            hfield = HEnumField(
                enum=MyHEnum)
        setattr(cls, 'MyModel', MyModel)
    def test(self):
       self.MyModel.objects.create(.....)
       self.assert(.....)  

我的问题是为此 test_model 创建一个数据库表。我打算在 TestMyField 类中进行

我试过了:

from django.db import connections 
db_connection = connections['default']
with db_connection.constraint_checks_disabled():
    with db_connection.schema_editor() as schema_editor :
       schema_editor.create_model(MyModel)`

这会导致以下异常: django.db.utils.NotSupportedError:启用外键约束检查时无法使用 SQLite 模式编辑器。确保在进入 transaction.atomic() 上下文之前禁用它们,因为 SQLite 不支持在多语句事务中禁用它们。

我尝试使用 SimpleTestcase 作为我的测试类而不是 TestCase。这会导致以下异常 django.test.testcases.DatabaseOperationForbidden:SimpleTestCase 子类中不允许对“默认”进行数据库查询。子类化 TestCase 或 TransactionTestCase 以确保正确的测试隔离,或将“默认”添加到 commons.tests.tests_enums_and_fields.TestHEnumField.databases 以消除此故障。

问题出在哪里。欢迎任何帮助

sqlite django-models django-database check-constraints django-tests
1个回答
0
投票

上面的代码通过了。只要确保 TestClass 是一个 unittest.TestCase 广告而不是 TestCase 或 SimpleTestCase

© www.soinside.com 2019 - 2024. All rights reserved.