1

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

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 和 migrate 运行顺利。完整的追溯可在此处获得:http: //pastebin.com/9dVmuVyt

4

1 回答 1

1

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

解决方案:

  • 避免在创建用户时自动创建此配置文件(难闻的气味)
  • 使用 Django 1.5 和它的自定义用户模型支持
  • 禁用南测试 (SOUTH_TESTS_MIGRATE = False) 并始终创建指定 syncdb --all 然后迁移 --fake 的新数据库。(虽然不是最好的解决方案)
于 2013-08-05T06:54:24.790 回答