我正在使用以下数据库设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(_DB_DIR, 'dev.db'),
'TEST_NAME': os.path.join(_DB_DIR, 'dev_test.db'),
}
}
但是,每次运行
python manage.py test
都会中断。问题似乎出在测试数据库上。出于某种原因,未在此处创建标准数据库中的相同表。该命令返回
django.db.utils.DatabaseError: no such table: tbforms_userprofile
。确实,当我使用sqlite3打开dev_test.db时,可能会看到指定的表(以及tbforms应用程序中的任何其他表)不存在。我想念什么?我在Sqlite中使用Django 1.4
PS:重要的是要注意syncdb和迁移运行平稳。完整的追溯可在这里找到:http://pastebin.com/9dVmuVyt
最佳答案
正如我们所讨论的,这里的问题是,存在用于User模型(在syncdb期间创建)的后保存信号,以创建Profile模型(在syncdb之后,在南方的迁移中创建)。因此,当syncdb(或您的测试)在新数据库上创建表并创建新用户时,尚未创建用户配置文件的表,并且会引发此错误。
解决方案:
避免在创建用户时自动创建此配置文件(有异味)
使用Django 1.5及其自定义用户模型支持
禁止向南进行测试(SOUTH_TESTS_MIGRATE = False),并始终创建指定syncdb --all的新数据库,然后迁移--fake。 (虽然不是最好的解决方案)
关于python - Django未正确创建测试数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18050862/