【问题标题】:Django is not creating the test database correctlyDjango 没有正确创建测试数据库
【发布时间】:2013-08-05 17:30:04
【问题描述】:

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

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

【问题讨论】:

  • 自添加 South 后,您是否在项目中添加了 tbforms?如果是这样,您可能需要为 tbforms 应用程序创建初始迁移。或者,只需将 SOUTH_TESTS_MIGRATE 设置为 False
  • 非常感谢!这就是我需要的

标签: python django sqlite


【解决方案1】:

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

解决方案:

  • 避免在创建用户时自动创建此配置文件(不好闻)
  • 使用 Django 1.5,它支持自定义用户模型
  • 禁用南测试 (SOUTH_TESTS_MIGRATE = False) 并始终创建新数据库并指定 syncdb --all 然后 migrate --fake。 (虽然不是最好的解决方案)

【讨论】:

  • 如您所知,获得了第三个选项......但我肯定会在某个时候迁移到 Django 1.5。用户配置文件信号的创建就像在这里指出的那样:stackoverflow.com/questions/1910359/…
猜你喜欢
  • 2020-11-17
  • 2014-12-15
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多