擅长:python、mysql、java
<p>@paluh的答案要求在非测试文件中添加不需要的代码,根据我的经验,@carl的解决方案不适用于使用fixture所需的django.test.TestCase。如果要使用django.test.TestCase,则需要确保在加载设备之前调用syncdb。这需要重写预安装方法(仅将代码放入安装方法是不够的)。我使用自己的TestCase版本,让我添加带有测试模型的应用程序。定义如下:</p>
<pre><code>from django.conf import settings
from django.core.management import call_command
from django.db.models import loading
from django import test
class TestCase(test.TestCase):
apps = ()
def _pre_setup(self):
# Add the models to the db.
self._original_installed_apps = list(settings.INSTALLED_APPS)
for app in self.apps:
settings.INSTALLED_APPS.append(app)
loading.cache.loaded = False
call_command('syncdb', interactive=False, verbosity=0)
# Call the original method that does the fixtures etc.
super(TestCase, self)._pre_setup()
def _post_teardown(self):
# Call the original method.
super(TestCase, self)._post_teardown()
# Restore the settings.
settings.INSTALLED_APPS = self._original_installed_apps
loading.cache.loaded = False
</code></pre>