我有一个包含多个应用程序的Django项目。他们都与engine = django.db.backends.postgresql_psycopg2
共享一个数据库。现在我想要GeoDjango
的一些功能,并决定将它集成到我现有的项目中。我仔细阅读了教程,看起来我必须为GeoDjango创建一个单独的spartial数据库。我想知道是否还有。我尝试将其添加到我的应用程序的models.py中,而不更改我的数据库设置:
from django.contrib.gis.db.models import PointField
class Location(models.Model):
location = PointField()
但是当我运行syncdb时,我收到了这个错误。
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)
答案 0 :(得分:2)
实际上,正如我记得的那样,django.contrib.gis.db.backends.postgis是postgresql_psycopg2的扩展,因此您可以在设置中更改数据库驱动程序,使用空间模板创建新数据库,然后将数据迁移到新数据库(南方很棒)为了这)。 geodjango本身高度依赖于DB内部方法,因此,遗憾的是,你不能将它与常规数据库一起使用。
其他方式 - 您可以使用django的multi-db能力,并为geodjango模型创建额外的数据库。
答案 1 :(得分:1)
您的错误似乎来自于未更改设置文件中的数据库扩展名。从技术上讲,您不需要使用空间模板创建新数据库,只需在现有数据库上运行PostGIS脚本即可获得所有地理空间的好处。与往常一样,您应该在执行此操作之前备份现有数据库。
答案 2 :(得分:0)
我不是100%,但我认为您可以将postgis.sql和spatial_ref_sys.sql传递到现有数据库,为表授予权限,并将数据库设置更改为“django.contrib.gis.db”。 backends.postgis”。 (当然你安装了deps之后)
https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#spatialdb-template
我很想知道你找到了什么。小心,postgis安装可以构建一些角色,但你不希望它构建太多。
答案 3 :(得分:0)
从文档(django 3.1)https://docs.djangoproject.com/en/3.1/ref/databases/#migration-operation-for-adding-extensions:
如果您需要使用迁移来添加PostgreSQL扩展(例如hstore,postgis等),请使用CreateExtension操作。