将 GeoDjango 集成到现有 Django 项目中

发布于 2024-11-17 07:45:51 字数 597 浏览 3 评论 0原文

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

I have a Django project with multiple apps. They all share a db with engine = django.db.backends.postgresql_psycopg2. Now I want some functionality of GeoDjango and decided I want to integrate it into my existing project. I read through the tutorial, and it looks like I have to create a separate spartial database for GeoDjango. I wonder if there is anyway around. I tried to add this into one of my apps' models.py without changing my db settings :

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

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

But when I run syncdb, I got this error.

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

绅刃 2024-11-24 07:45:51

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

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

Actually, as i recall, django.contrib.gis.db.backends.postgis is extension of postgresql_psycopg2 so you could change db driver in settings, create new db with spatial template and then migrate data to new db (South is great for this). By itself geodjango is highly dependent on DB inner methods thus, unfortunately, you couldn't use it with regular db.

Other way - you could make use of django's multi-db ability, and create extra db for geodjango models.

昔梦 2024-11-24 07:45:51

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

Your error looks like it comes from not changing the database extension in your settings file. You don't technically need to create a new database using the spatial template, you can simply run the PostGIS scripts on your existing database to get all of the geospatial goodies. As always, you should backup your existing database before doing this though.

谁对谁错谁最难过 2024-11-24 07:45:51

我不是 100%,但我认为您可以将 postgis.sql 和 Spatial_ref_sys.sql 通过管道传输到现有数据库中,授予对表的权限,并将数据库设置更改为“django.contrib.gis.db.backends.postgis” ”。 (当然,在安装了依赖项之后)

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

我很想看看你发现了什么。小心,postgis 安装可以构建一些字符,但你不希望它构建太多。

I'm not 100%, but I think that you can pipe postgis.sql and spatial_ref_sys.sql into your existing database, grant permissions to the tables, and change the db setting to "django.contrib.gis.db.backends.postgis". (After you have installed the deps of course)

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

I'd be interested to see what you find. Be careful, postgis installation can build some character but you don't want it to build too much.

一影成城 2024-11-24 07:45:51

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

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

From the docs (django 3.1) https://docs.djangoproject.com/en/3.1/ref/databases/#migration-operation-for-adding-extensions :

If you need to add a PostgreSQL extension (like hstore, postgis, etc.) using a migration, use the CreateExtension operation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文