2011-01-19 12 views
6

私はDjango 1.2.3、PostGIS 1.5.2を使用しています。私のpython manage.py syncdbの実行Djangoは、私がpython manage.py syncdbを実行すると、データベースにPointFieldを作成することを避けます

を実行したときに、それは私のモデルからデータベース内の他のすべてのフィールドを作成していますが、私はになってポイントをという名前のフィールドを作成することを回避するいくつかの理由

PointFieldである。

from django.contrib.gis.db import models 

をし、次のようにコメント:私のmodel.pyファイルで

私がインポートされている

#from django.db import models 

私のモデルは次のようになります。

class MyModel(models.Model): 
    myid = models.AutoField(primary_key=True) 
    title = models.CharField(max_length=50) 
    point = models.PointField() 
    objects = models.GeoManager() 

はまた時に作成されます管理側私は以下のエラーを受け取ります:

私setting.pyで
Failed to install index for reports.MyModel model: permission denied for relation spatial_ref_sys 
CONTEXT: SQL statement "SELECT SRID   FROM spatial_ref_sys WHERE SRID = new_srid" 
PL/pgSQL function "addgeometrycolumn" line 74 at SQL statement 
SQL statement "SELECT AddGeometryColumn('','',$1,$2,$3,$4,$5)" 
PL/pgSQL function "addgeometrycolumn" line 4 at SQL statement 

私が追加しました:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.contrib.gis.db.backends.postgis', 

INSTALLED_APPS = (
... 
    'django.contrib.gis', 
... 

任意のIDEを私はこの問題を波打つよ、なぜ?ありがとうございました!

答えて

8

問題は、PostgreSQLユーザロールdjangoが使用する権限が不十分だったことです。

PostGISでデータベースを有効にしたとき、別のユーザーロールを使用して2つのテーブル「geometry_columns」と「spatial_ref_sys」が作成されました。だから、Djangoがこれらの2つのテーブルにアクセスしようとしていたときに、十分な権限がなかったために、

それは私が最新のDjangoをダウンロードして使用した後、それは働いていた、シンプル、やれやれ:)

+1

djangoユーザの役割をスーパーユーザに変更しましたか? – dannyroa

+0

私はちょうど同じエラーを受け取り、問題の2つのテーブルの所有者をSQLで変更することで修正しました: 'ALTER TABLE geometry_columns OWNER TO newuser'がスーパーユーザーとして実行されました。 – markshep

+0

'spatial_ref_sys'カラムにアクセスする唯一の方法は、スーパーユーザを使用することでした。 –

0

あなたは、私がDjangoの1.4.3でこのエラーを得ていたことを知ってもらいたいことを9.1とPostGISの2 Postgresのでしたdev(1.6α)。 Postgresユーザーがスーパーユーザーになる必要はありませんでした。どうやらPostGIS 2のサポートがDjango 1.5に追加されました。

関連する問題