对于涉及
managed=False
模型的测试,您可以确保在测试设置中创建正确的表格。
我不知道如何在测试设置中创建表格。我发现这个question并且接受的答案对我没有用。我认为这是因为迁移文件。配置在迁移文件中,以便随时更改值"没有任何影响。
在Django 1.7 +中解决这个问题的方法是什么?
答案 0 :(得分:0)
我认为它应该在Django 1.7+中类似。当您要运行测试时,您应该使用Django管理这些模型(仅用于测试目的)。 此转换应在创建表之前完成,Django允许您在settings.py
中为类实例设置TEST_RUNNER。# settings_test.py
TEST_RUNNER = 'utils.test_runner.ManagedModelTestRunner'
# test_runner.py
from django.test.runner import DiscoverRunner
class ManagedModelTestRunner(DiscoverRunner):
"""
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
super(ManagedModelTestRunner, self).setup_test_environment(*args,
**kwargs)
self.unmanaged_models = [m for m in get_models(only_installed=False)
if not m._meta.managed]
for m in self.unmanaged_models:
m._meta.managed = True
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
答案 1 :(得分:0)
#0001_initial.py (or followings)
class Migration(migrations.Migration):
operations = [
migrations.RunSQL("CREATE TABLE..."),
...
]
我是“迁移新手”,所以我不知道这是不是最好的选择。但它确实有效。