2013-08-05 27 views
1

我使用下面的數據庫設置Django是不是創建測試數據庫中正確

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應用程序的其他表)不存在。

我錯過了什麼?我使用Django 1.4和Sqlite

PS:重要的是要注意syncdb和migrate平穩運行。完整的回溯可以在這裏找到:http://pastebin.com/9dVmuVyt

+1

你添加了tbforms到你的項目,因爲增加了南?如果是這樣,您可能需要爲tbforms應用程序創建初始遷移。或者,只需將[SOUTH_TESTS_MIGRATE](http://south.readthedocs.org/en/latest/settings.html#south-tests-migrate)設置爲「False」即可。 –

+0

非常感謝!這就是我所需要的 –

回答

1

正如我們已經討論過的,這裏的問題是,用戶模型(在syncdb期間創建)有一個後保存信號來創建Profile模型(它是在syncdb ,南遷)。因此,當syncdb(或您的測試)在新數據庫上創建表並創建新用戶時,用戶配置文件的表尚未創建,並且會引發此錯誤。

解決方案:

  • 避免此配置文件創建在用戶創建自動(惡臭吧)
  • 使用Django 1.5,它的自定義用戶模型的支持
  • 用於測試南方禁用( SOUTH_TESTS_MIGRATE = False)並始終創建指定syncdb的新數據庫 - 然後遷移--fake。 (不是最好的解決方案,雖然)
+0

得到第三個選項,因爲你知道......但肯定我會遷移到Django 1.5在某些時候。用戶配置文件信號的創建方式與此處指出的一樣:http://stackoverflow.com/questions/1910359/creating-a-extended-user-profile –

相關問題