2011-07-13 121 views
4

Django:1.3; PyCharm:1.5.3爲什麼導入django設置兩次,運行單元測試時創建兩次測試數據庫?

我正在爲使用GEOS保存Point對象的Django應用程序編寫單元測試。對於本地測試,我遵循GeoDjango文檔中定製Spatialite後端的每一步。

無論何時我嘗試使用Point對象創建並保存模型實例,我都遇到了GEOS_ERROR(GEOS_ERROR:幾何必須是Point或LineString)。很明顯,Point對象確實在模型的get_or_create函數中傳遞。並且可以保存相同的模型,而在shell中沒有問題。

沒有太多注意導致此錯誤的代碼,我發現每次運行單元測試時,Django都會導入設置,創建測試數據庫並立即銷燬數據庫,然後再次創建測試數據庫最終會拋出錯誤的測試。

Testing started at 5:09 PM ...<br /> 
Importing Django settings module settings 
SpatiaLite version ..: 2.4.0 Supported Extensions: 
    - 'VirtualShape' [direct Shapefile access] 
    - 'VirtualText'[direct CSV/TXT access] 
    - 'VirtualNetwork [Dijkstra shortest path] 
    - 'RTree'  [Spatial Index - R*Tree] 
    - 'MbrCache'  [Spatial Index - MBR cache] 
    - 'VirtualFDO'  [FDO-OGR interoperability] 
    - 'SpatiaLite'  [Spatial SQL - OGC] 
PROJ.4 Rel. 4.7.1, 23 September 2009 
GEOS version 3.3.0-CAPI-1.7.0Creating test database 'default'... 
Destroying old test database 'default'... 
SpatiaLite version ..: 2.4.0 Supported Extensions: 
(same Spatialite settings again) 
cannot start a transaction within a transaction 
cannot rollback transaction - SQL statements in progress 
Syncing... 
Creating tables ... 

我懷疑這是PyCharm造成的。但是當我從終端shell運行'python manage.py test'時,重複了同樣的過程,並拋出了相同的錯誤。

我檢查了我的設置文件,但找不到它爲什麼會提示自己被導入兩次以及測試數據庫爲什麼創建兩次。用於創建Spatialite數據庫的必需init_spatialite-2。*。sql也位於項目路徑中。

任何意見將不勝感激!

更新: 我被JetBrains公司獲悉,中的runserver的settings.py的兩倍,進口可以固定這個補丁或通過的runserver --noreload。 http://code.djangoproject.com/changeset/15911

但是,測試任務的導入錯誤仍然存​​在。

+2

我也很感興趣看到這個解釋,因爲我也注意到了這一點,儘管它幸運地沒有給我帶來任何問題。 – mockobject

+0

這不會導致我在測試應用程序中不需要使用GEOS支持/創建的幾何列的其他模塊時遇到任何問題。所以我有強烈的懷疑幾何字段不能保存,因爲這個數據庫錯誤,但我不能證明或測試:(:) –

+0

這是(是?)一個已知的問題,谷歌:Django設置兩次導入。我認爲自Django 1.4雙重加載不會再發生 – n3storm

回答

0

這很可能是因爲您在導入路徑中同時包含settings.py和contains包。由於這些設置可以在不同的模塊(設置和myproject.settings)下導入,因此可以執行兩次。

只要確保你總是使用DJANGO_SETTINGS_MODULE =設置,而不是DJANGO_SETTINGS_MODULE = myproject.settings或含有settings.py

或者,更好的目錄中刪除__init__.py文件,升級到1.4的Django