如何在Django测试期间使用managed = False创建表
我有一个托管= 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”?
在实际的应用程序中,该模型实际上由数据库中的视图支持。但是在测试期间,我希望将此表视为一个表并能够在其中插入测试数据。
-
请查看此博客文章: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