Django没有正确创建测试数据库

时间:2013-08-05 05:03:59

标签: python django sqlite

我正在使用以下数据库设置

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

1 个答案:

答案 0 :(得分:1)

正如我们已经讨论过的,这里的问题是用户模型(在syncdb期间创建)有一个保存后信号来创建一个Profile模型(在南方迁移后的syncdb之后创建)。因此,当syncdb(或您的测试)在新数据库上创建表并创建新用户时,尚未创建用户配置文件的表,并且会引发此错误。

<强>解决方案:

  • 避免在创建用户时自动创建此配置文件(不好闻起来)
  • 使用Django 1.5及其自定义用户模型支持
  • 禁用南以进行测试(SOUTH_TESTS_MIGRATE = False)并始终创建指定syncdb的新数据库 - 然后再迁移--fake。 (不是最好的解决方案)