如何在Django测试期间使用managed = False创建表

发布于 2021-01-29 15:17:59

我有一个托管= False的模型。

class SampleModel(models.Model):
    apple = models.CharField(max_length=30)
    orange = models.CharField(max_length=30)

    class Meta:
        managed = False

我有一个创建SampleModel的单元测试,但是当我运行测试时,我得到:

DatabaseError: no such table: SAMPLE_SAMPLE_MODEL

django文档-https: //docs.djangoproject.com/zh-
cn/dev/ref/models/options/#managed
文件包含以下内容:

对于涉及Managed = False的模型的测试,要确保在测试设置中创建了正确的表。

在测试设置过程中,如何实际“创建”表?或者,如何进行测试,以便在运行测试时该模型在测试期间具有“ managed = True”?

在实际的应用程序中,该模型实际上由数据库中的视图支持。但是在测试期间,我希望将此表视为一个表并能够在其中插入测试数据。

关注者
0
被浏览
206
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    请查看此博客文章:http :
    //www.caktusgroup.com/blog/2010/09/24/simplifying-the-testing-of-unmanaged-
    database-models-in-
    django/
    详细描述了创建一个非托管模型的测试运行程序。

    from django.test.simple import DjangoTestSuiteRunner
    
    
    class ManagedModelTestRunner(DjangoTestSuiteRunner):
        """
        Test runner that automatically makes all unmanaged models in your Django
        project managed for the duration of the test run, so that one doesn't need
        to execute the SQL manually to create them.
        """
        def setup_test_environment(self, *args, **kwargs):
            from django.db.models.loading import get_models
            self.unmanaged_models = [m for m in get_models()
                                     if not m._meta.managed]
            for m in self.unmanaged_models:
                m._meta.managed = True
            super(ManagedModelTestRunner, self).setup_test_environment(*args,
                                                                       **kwargs)
    
        def teardown_test_environment(self, *args, **kwargs):
            super(ManagedModelTestRunner, self).teardown_test_environment(*args,
                                                                          **kwargs)
            # reset unmanaged models
            for m in self.unmanaged_models:
                m._meta.managed = False
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看