6

我有一个包含多个应用程序的 Django 项目。他们都与engine = django.db.backends.postgresql_psycopg2. 现在我想要一些功能GeoDjango并决定将它集成到我现有的项目中。我通读了教程,看起来我必须为 GeoDjango 创建一个单独的空间数据库。我想知道周围是否有任何东西。我尝试在不更改数据库设置的情况下将其添加到我的一个应用程序的 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)
4

4 回答 4

2

实际上,我记得,django.contrib.gis.db.backends.postgis 是 postgresql_psycopg2 的扩展,因此您可以在设置中更改数据库驱动程序,使用空间模板创建新数据库,然后将数据迁移到新数据库(South 非常适合此) . geodjango 本身高度依赖于 DB 内部方法,因此很遗憾,您不能将它与常规 db 一起使用。

其他方式 - 您可以利用 django 的多数据库功能,并为 geodjango 模型创建额外的数据库。

于 2011-07-03T16:56:23.097 回答
1

您的错误似乎来自未更改设置文件中的数据库扩展名。从技术上讲,您不需要使用空间模板创建新数据库,只需在现有数据库上运行 PostGIS 脚本即可获取所有地理空间信息。与往常一样,您应该在执行此操作之前备份现有数据库。

于 2011-07-18T19:06:42.410 回答
0

我不是 100%,但我认为您可以将 postgis.sql 和 spatial_ref_sys.sql 导入现有数据库,授予表权限,并将 db 设置更改为“django.contrib.gis.db.backends.postgis ”。(当然,在你安装了 deps 之后)

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

我很想看看你发现了什么。请注意,postgis 安装可以构建一些角色,但您不希望它构建太多。

于 2011-07-18T22:02:48.910 回答
0

来自文档(django 3.1)https://docs.djangoproject.com/en/3.1/ref/databases/#migration-operation-for-adding-extensions

如果您需要使用迁移添加 PostgreSQL 扩展(如 hstore、postgis 等),请使用 CreateExtension 操作。

于 2020-09-29T22:17:54.453 回答