【问题标题】:Integrating GeoDjango into existing Django project将 GeoDjango 集成到现有的 Django 项目中
【发布时间】:2011-09-22 18:40:30
【问题描述】:

我有一个包含多个应用程序的 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)

【问题讨论】:

    标签: database django geodjango


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 请问如何在现有数据库上运行 POSTGIS 脚本?
        【解决方案4】:

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

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

        【讨论】:

        • 如果你不使用 South,你需要开始。特别是如果您使用版本控制工具进行开发。
        猜你喜欢
        • 2017-02-22
        • 2021-06-04
        • 2010-10-31
        • 2012-03-28
        • 2015-09-18
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多