看一下由Bernie Sumption发布到Django开发人员邮件列表的解决方法:
如果尚未运行makemigrations,则“ migrate”命令会将应用程序视为未迁移,并直接从模型中创建表,就像syncdb在1.6中所做的那样。我为单元测试定义了一个新的设置模块,名为“ settings_test.py”,该模块从主设置模块导入*并添加以下行:
MIGRATION_MODULES = {“ myapp”:“ myapp.migrations_not_used_in_tests”}
然后我运行如下测试:
DJANGO_SETTINGS_MODULE =“ myapp.settings_test” python manage.py测试
傻瓜会迁移到认为该应用程序未迁移的状态,因此每次创建测试数据库时,它都会反映出models.py的当前结构。
在Django 1.9中,这种情况有所改善,你可以将值设置为None
:
MIGRATION_MODULES = {“ myapp”:无}
这是我的设置文件的结尾:
class DisableMigrations(object):
def __contains__(self, item):
return True
def __getitem__(self, item):
return None
TESTS_IN_PROGRESS = False
if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
logging.disable(logging.CRITICAL)
PASSWORD_HASHERS = (
'django.contrib.auth.hashers.MD5PasswordHasher',
)
DEBUG = False
TEMPLATE_DEBUG = False
TESTS_IN_PROGRESS = True
MIGRATION_MODULES = DisableMigrations()