1

我有一个非常简短的问题:我已经有一个使用 PostgreSQL 为我的数据库后端设置博客应用程序的项目。我即将开始试验 GeoDjango 和 PostGIS。为了创建一个使用 GeoDjango 的数据库,该数据库必须使用一个 spatial_template。我真的不想管理两个项目并做一些奇怪的事情来让这两个项目协同工作。如果可能的话,我想简单地安装 PostGIS,并在同一个项目中启动一个新应用程序。然后,我希望我能够使用空间模板启动一个新数据库来运行我的空间数据。

我的问题是:我仍然可以使用我的非空间博客模型(或任何其他模型,就此而言)与使用空间模板的 PostGIS 数据库一起使用吗?

我不想通过所有 GeoDjango 依赖项的安装来发现它不起作用,这就是我首先问的原因。

期待您的反馈意见。

4

2 回答 2

1

如果您有 PostgreSQL 9.1 或更高版本,则可以将 PostGIS 作为扩展添加到现有数据库:

CREATE EXTENSION postgis;

如果您发现它不是您想要的,则将其删除:

DROP EXTENSION postgis;
于 2013-10-02T02:56:31.217 回答
0

是的,它可以做到。我创建了两个模型,一个带有点,另一个带有非空间相关数据。使用 template_postgis。这是一些代码:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        # 'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'pccs',
        'USER': 'xxxxx',
        'PASSWORD': 'xxxxx',
        'HOST': 'localhost', 
        'PORT': '5432', # Set to empty string for default.
}

}

from django.contrib.gis.db import models

class Station(models.Model):
    station_num = models.IntegerField("Station Number", max_length=4, primary_key=True)
    station_name = models.CharField("Station Name", max_length=50)
    station_type = models.CharField("Station Type", max_length=20, choices=TYPE_CHOICES)
    geom = models.PointField(srid=4326)
    objects = models.GeoManager()

def __unicode__(self):
    return unicode(self.station_name)

class Meta:
    verbose_name_plural = 'Monitoring Stations'


class Nutrient(models.Model):
    station_num = models.ForeignKey(Station)
    sample_date = models.DateField(editable=True)
    #sample_depth = models.IntegerField("Sample Depth", max_length=4, default="1")
    a = models.DecimalField("Temperature", max_digits=10, decimal_places=4)
    ...
    o = models.DecimalField("ph", max_digits=10, decimal_places=4, blank=True, null=True)

def __unicode__(self):
    return unicode(self.station_num_id)


class Meta:
    verbose_name_plural = 'Water Sample Data'

希望这就是你要找的

于 2013-10-10T12:43:46.350 回答