4

ジャンゴ: 1.3; パイチャーム: 1.5.3

GEOS を使用して Point オブジェクトを保存する Django アプリケーションの単体テストを作成しています。ローカル テストでは、GeoDjango のドキュメントに従って、Spatialite バックエンドをカスタマイズするすべての手順に従いました。

Point オブジェクトを使用してモデル インスタンスを作成および保存しようとすると、常に GEOS_ERROR (GEOS_ERROR: Geometry must be a Point or LineString) が発生しました。Point オブジェクトが実際にモデルの get_or_create 関数に渡されたことは明らかです。また、同じモデルをシェルに問題なく保存できます。

このエラーの原因となったコードについて深く掘り下げることはしませんが、単体テストを実行するたびに、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 が原因であると思われました。しかし、ターミナル シェルから 'python manage.py test' を実行すると、同じプロセスが繰り返され、同じエラーがスローされました。

設定ファイルを確認しましたが、2 回インポートされるように促す理由と、テスト データベースが 2 回作成された理由を見つけることができませんでした。Spatialite データベースを作成するために必要な init_spatialite-2.*.sql もプロジェクト パスにあります。

どんなアドバイスでも大歓迎です!

更新: JetBrains から、runserver 中の settings.py の 2 回のインポートは、このパッチまたは runserver --noreload で修正できると通知されました。 http://code.djangoproject.com/changeset/15911

ただし、テスト タスクではインポート エラーが引き続き発生していました。

4

1 に答える 1

0

これはおそらく、インポート パスに settings.py とそれを含むパッケージの両方があるために発生します。設定は異なるモジュール (settings と myproject.settings) の下にインポートできるため、2 回実行される可能性があります。

DJANGO_SETTINGS_MODULE=myproject.settings の代わりに DJANGO_SETTINGS_MODULE=settings を常に使用するか、settings.py を含むディレクトリから __init__.py ファイルを削除してください。

または、より良いのは、django 1.4 にアップグレードすることです。

于 2013-03-25T00:19:53.223 に答える