Fixed #8881 by specifying the geometry column name; added the `geom_col_name` classmethod to `GeometryColumns` for Oracle and PostGIS.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8994 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
2dd4b949f5
commit
152b9ba717
|
@ -21,8 +21,20 @@ class GeometryColumns(models.Model):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def table_name_col(cls):
|
def table_name_col(cls):
|
||||||
|
"""
|
||||||
|
Returns the name of the metadata column used to store the
|
||||||
|
the feature table name.
|
||||||
|
"""
|
||||||
return 'table_name'
|
return 'table_name'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def geom_col_name(cls):
|
||||||
|
"""
|
||||||
|
Returns the name of the metadata column used to store the
|
||||||
|
the feature geometry column.
|
||||||
|
"""
|
||||||
|
return 'column_name'
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
|
return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,20 @@ class GeometryColumns(models.Model):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def table_name_col(cls):
|
def table_name_col(cls):
|
||||||
"Class method for returning the table name column for this model."
|
"""
|
||||||
|
Returns the name of the metadata column used to store the
|
||||||
|
the feature table name.
|
||||||
|
"""
|
||||||
return 'f_table_name'
|
return 'f_table_name'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def geom_col_name(cls):
|
||||||
|
"""
|
||||||
|
Returns the name of the metadata column used to store the
|
||||||
|
the feature geometry column.
|
||||||
|
"""
|
||||||
|
return 'f_geometry_column'
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "%s.%s - %dD %s field (SRID: %d)" % \
|
return "%s.%s - %dD %s field (SRID: %d)" % \
|
||||||
(self.f_table_name, self.f_geometry_column,
|
(self.f_table_name, self.f_geometry_column,
|
||||||
|
|
|
@ -179,13 +179,16 @@ class LayerMapping(object):
|
||||||
self.ds = data
|
self.ds = data
|
||||||
self.layer = self.ds[layer]
|
self.layer = self.ds[layer]
|
||||||
|
|
||||||
# Setting the mapping
|
# Setting the mapping & model attributes.
|
||||||
self.mapping = mapping
|
self.mapping = mapping
|
||||||
|
|
||||||
# Setting the model, and getting the geometry column associated
|
|
||||||
# with the model (an exception will be raised if there is no
|
|
||||||
# geometry column).
|
|
||||||
self.model = model
|
self.model = model
|
||||||
|
|
||||||
|
# Checking the layer -- intitialization of the object will fail if
|
||||||
|
# things don't check out before hand.
|
||||||
|
self.check_layer()
|
||||||
|
|
||||||
|
# Getting the geometry column associated with the model (an
|
||||||
|
# exception will be raised if there is no geometry column).
|
||||||
self.geo_col = self.geometry_column()
|
self.geo_col = self.geometry_column()
|
||||||
|
|
||||||
# Checking the source spatial reference system, and getting
|
# Checking the source spatial reference system, and getting
|
||||||
|
@ -197,10 +200,6 @@ class LayerMapping(object):
|
||||||
else:
|
else:
|
||||||
self.transform = transform
|
self.transform = transform
|
||||||
|
|
||||||
# Checking the layer -- intitialization of the object will fail if
|
|
||||||
# things don't check out before hand.
|
|
||||||
self.check_layer()
|
|
||||||
|
|
||||||
# Setting the encoding for OFTString fields, if specified.
|
# Setting the encoding for OFTString fields, if specified.
|
||||||
if encoding:
|
if encoding:
|
||||||
# Making sure the encoding exists, if not a LookupError
|
# Making sure the encoding exists, if not a LookupError
|
||||||
|
@ -246,7 +245,8 @@ class LayerMapping(object):
|
||||||
there is no need to increment through each feature in the Layer.
|
there is no need to increment through each feature in the Layer.
|
||||||
"""
|
"""
|
||||||
# The geometry field of the model is set here.
|
# The geometry field of the model is set here.
|
||||||
# TODO: Support more than one geometry field / model.
|
# TODO: Support more than one geometry field / model. However, this
|
||||||
|
# depends on the GDAL Driver in use.
|
||||||
self.geom_field = False
|
self.geom_field = False
|
||||||
self.fields = {}
|
self.fields = {}
|
||||||
|
|
||||||
|
@ -512,8 +512,14 @@ class LayerMapping(object):
|
||||||
# Getting the GeometryColumn object.
|
# Getting the GeometryColumn object.
|
||||||
try:
|
try:
|
||||||
db_table = self.model._meta.db_table
|
db_table = self.model._meta.db_table
|
||||||
if SpatialBackend.name == 'oracle': db_table = db_table.upper()
|
geo_col = self.geom_field
|
||||||
gc_kwargs = {GeometryColumns.table_name_col() : db_table}
|
if SpatialBackend.name == 'oracle':
|
||||||
|
# Making upper case for Oracle.
|
||||||
|
db_table = db_table.upper()
|
||||||
|
geo_col = geo_col.upper()
|
||||||
|
gc_kwargs = {GeometryColumns.table_name_col() : db_table,
|
||||||
|
GeometryColumns.geom_col_name() : geo_col,
|
||||||
|
}
|
||||||
return GeometryColumns.objects.get(**gc_kwargs)
|
return GeometryColumns.objects.get(**gc_kwargs)
|
||||||
except Exception, msg:
|
except Exception, msg:
|
||||||
raise LayerMapError('Geometry column does not exist for model. (did you run syncdb?):\n %s' % msg)
|
raise LayerMapError('Geometry column does not exist for model. (did you run syncdb?):\n %s' % msg)
|
||||||
|
|
Loading…
Reference in New Issue