2011-06-25 12 views
5

Mam projekt Django z wieloma aplikacjami. Wszystkie mają wspólną bazę danych z engine = django.db.backends.postgresql_psycopg2. Teraz chcę mieć funkcjonalność GeoDjango i zdecydowałem, że chcę ją zintegrować z moim istniejącym projektem. Przeczytałem samouczek i wygląda na to, że muszę stworzyć oddzielną spartialną bazę danych dla GeoDjango. Zastanawiam się, czy jest i tak. Próbowałem dodać to do jednego z models.py Moje aplikacje, nie zmieniając swoje ustawienia DB:Integrowanie GeoDjango z istniejącym projektem Django

from django.contrib.gis.db.models import PointField 

class Location(models.Model): 
     location = PointField() 

Ale kiedy uruchomić syncdb, mam ten błąd.

File "/home/virtual/virtual-env/lib/python2.7/site-packages/django/contrib/gis/db/models/fields.py", line 200, in db_type 
    return connection.ops.geo_db_type(self) 

Odpowiedz

2

Faktycznie, o ile pamiętam, django.contrib.gis.db.backends.postgis jest przedłużenie postgresql_psycopg2 więc można zmienić w ustawieniach sterownika db, tworzyć nowe dB szablonu przestrzennej, a następnie migrować dane do nowego db (Południe jest do tego świetne). Samo geodjango jest bardzo zależne od wewnętrznych metod DB, więc niestety nie można go używać z regularnymi db.

W inny sposób - można skorzystać z umiejętności django multi-db i utworzyć dodatkowe db dla modeli geodjango.

+1

Jeśli nie korzystasz z południa, musisz zacząć. Zwłaszcza jeśli rozwijasz za pomocą narzędzi kontroli wersji. –

1

Twój błąd wygląda na to, że nie zmienia się rozszerzenie bazy danych w pliku ustawień. Nie trzeba technicznie tworzyć nowej bazy danych za pomocą szablonu przestrzennego, wystarczy uruchomić skrypty PostGIS w istniejącej bazie danych, aby uzyskać wszystkie zasoby geoprzestrzenne. Jak zawsze powinieneś jednak wykonać kopię zapasową istniejącej bazy danych.

0

Nie jestem w 100%, ale myślę, że możesz wstawić postgis.sql i spatial_ref_sys.sql do istniejącej bazy danych, przyznać uprawnienia do tabel i zmienić ustawienie db na "django.contrib.gis.db" .backends.postgis ". (Po zainstalowaniu deps oczywiście)

https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#spatialdb-template

byłbym zainteresowany, aby zobaczyć, co można znaleźć. Uważaj, instalacja postgis może zbudować jakąś postać, ale nie chcesz jej zbyt wiele.