2011-01-19 10 views
6

Używam Django 1.2.3, PostGIS 1.5.2.Django unika tworzenia PointField w bazie danych po uruchomieniu Pythona manage.py syncdb

Z jakiegoś powodu, gdy biegnę

python manage.py syncdb

to tworzenie wszystkich innych pól w bazie danych z moich modeli, ale unika tworzenia równych nazwałem punkt, który podobno być PointField.

W moich plików model.py mam importowane:

from django.contrib.gis.db import models 

i komentuje:

#from django.db import models 

mój model wygląda mniej więcej tak:

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

Również po utworzeniu strona administracyjna Otrzymuję poniższe błędy:

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 

W moim setting.py Dodałem:

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

i

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

Wszelkie Idy dlaczego mam falujący te problemy? Dziękuję Ci!

Odpowiedz

8

Problem polegał na tym, że używana przez django rola użytkownika PostgreSQL miała niewystarczające uprawnienia.

Co się stało, gdy włączyłem moją bazę danych z PostGIS, utworzono kilka tabel "geometry_columns" i "spatial_ref_sys", używając innej roli użytkownika. Kiedy Django próbował uzyskać dostęp do tych dwóch stołów, zablokował się, ponieważ nie miał wystarczających uprawnień.

To było takie proste, uff :)

+1

Czy zmieniłeś rolę użytkownika django na Superuser? – dannyroa

+0

Po prostu dostałem ten sam błąd i naprawiłem go zmieniając właściciela dwóch tabel, o których mowa, za pomocą SQL w następujący sposób: 'ALTER TABLE geometry_columns OWNER TO newuser' wykonany jako superuser. – markshep

+0

Jedynym sposobem na uzyskanie dostępu do kolumny 'spatial_ref_sys' było użycie superużytkownika. –

0

Chcieliśmy poinformować, że ja otrzymuję ten błąd na Django 1.4.3, PostgreSQL 9.1 oraz PostGIS 2. Udało się po tym, jak pobrać i używać najnowszej Django dev (1,6 alpha). Nie było potrzeby, aby użytkownik Postgreatora był superużytkownikiem. Wygląda na to, że obsługa PostGIS 2 została dodana w Django 1.5