使用spatial_template在PostGIS数据库中使用非空间模型

时间:2013-10-01 18:08:41

标签: django postgresql postgis geodjango

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

我的问题是:我是否仍然能够使用Spatial_template将我的非空间博客模型(或任何其他模型)与PostGIS数据库一起使用?

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

期待您的反馈。

2 个答案:

答案 0 :(得分:1)

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

CREATE EXTENSION postgis;

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

DROP EXTENSION postgis;

答案 1 :(得分: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'

希望这就是你要找的东西