Renamed BaseSpatialOperations.geography to BaseSpatialFeatures.supports_geography.
This commit is contained in:
parent
69ffaa297c
commit
dbb4a86fa7
@ -14,6 +14,8 @@ class BaseSpatialFeatures:
|
|||||||
# Does the backend introspect GeometryField to its subtypes?
|
# Does the backend introspect GeometryField to its subtypes?
|
||||||
supports_geometry_field_introspection = True
|
supports_geometry_field_introspection = True
|
||||||
|
|
||||||
|
# Does the database have a geography type?
|
||||||
|
supports_geography = False
|
||||||
# Does the backend support storing 3D geometries?
|
# Does the backend support storing 3D geometries?
|
||||||
supports_3d_storage = False
|
supports_3d_storage = False
|
||||||
# Reference implementation of 3D functions is:
|
# Reference implementation of 3D functions is:
|
||||||
|
@ -23,9 +23,6 @@ class BaseSpatialOperations:
|
|||||||
def select_extent(self):
|
def select_extent(self):
|
||||||
return self.select
|
return self.select
|
||||||
|
|
||||||
# Does the spatial database have a geography type?
|
|
||||||
geography = False
|
|
||||||
|
|
||||||
# Aggregates
|
# Aggregates
|
||||||
disallowed_aggregates = ()
|
disallowed_aggregates = ()
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ from django.db.backends.postgresql.features import (
|
|||||||
|
|
||||||
|
|
||||||
class DatabaseFeatures(BaseSpatialFeatures, Psycopg2DatabaseFeatures):
|
class DatabaseFeatures(BaseSpatialFeatures, Psycopg2DatabaseFeatures):
|
||||||
|
supports_geography = True
|
||||||
supports_3d_storage = True
|
supports_3d_storage = True
|
||||||
supports_3d_functions = True
|
supports_3d_functions = True
|
||||||
supports_left_right_lookups = True
|
supports_left_right_lookups = True
|
||||||
|
@ -98,7 +98,6 @@ class ST_Polygon(Func):
|
|||||||
class PostGISOperations(BaseSpatialOperations, DatabaseOperations):
|
class PostGISOperations(BaseSpatialOperations, DatabaseOperations):
|
||||||
name = 'postgis'
|
name = 'postgis'
|
||||||
postgis = True
|
postgis = True
|
||||||
geography = True
|
|
||||||
geom_func_prefix = 'ST_'
|
geom_func_prefix = 'ST_'
|
||||||
|
|
||||||
Adapter = PostGISAdapter
|
Adapter = PostGISAdapter
|
||||||
|
@ -145,7 +145,11 @@ class BaseSpatialField(Field):
|
|||||||
return None
|
return None
|
||||||
return connection.ops.Adapter(
|
return connection.ops.Adapter(
|
||||||
super().get_db_prep_value(value, connection, *args, **kwargs),
|
super().get_db_prep_value(value, connection, *args, **kwargs),
|
||||||
**({'geography': True} if self.geography and connection.ops.geography else {})
|
**(
|
||||||
|
{'geography': True}
|
||||||
|
if self.geography and connection.features.supports_geography
|
||||||
|
else {}
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_raster_prep_value(self, value, is_candidate):
|
def get_raster_prep_value(self, value, is_candidate):
|
||||||
|
@ -95,7 +95,7 @@ class GeographyFunctionTests(FuncTestMixin, TestCase):
|
|||||||
Cast a geography to a geometry field for an aggregate function that
|
Cast a geography to a geometry field for an aggregate function that
|
||||||
expects a geometry input.
|
expects a geometry input.
|
||||||
"""
|
"""
|
||||||
if not connection.ops.geography:
|
if not connection.features.supports_geography:
|
||||||
self.skipTest("This test needs geography support")
|
self.skipTest("This test needs geography support")
|
||||||
expected = (-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
|
expected = (-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
|
||||||
res = City.objects.filter(
|
res = City.objects.filter(
|
||||||
|
@ -10,7 +10,7 @@ from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
|
|||||||
from django.test.utils import modify_settings
|
from django.test.utils import modify_settings
|
||||||
|
|
||||||
from ..test_data import TEST_DATA
|
from ..test_data import TEST_DATA
|
||||||
from ..utils import mariadb, postgis
|
from ..utils import mariadb
|
||||||
from .models import AllOGRFields
|
from .models import AllOGRFields
|
||||||
|
|
||||||
|
|
||||||
@ -44,9 +44,10 @@ class InspectDbTests(TestCase):
|
|||||||
output = out.getvalue()
|
output = out.getvalue()
|
||||||
if connection.features.supports_geometry_field_introspection:
|
if connection.features.supports_geometry_field_introspection:
|
||||||
self.assertIn('point = models.PointField(dim=3)', output)
|
self.assertIn('point = models.PointField(dim=3)', output)
|
||||||
if postgis:
|
if connection.features.supports_geography:
|
||||||
# Geography type is specific to PostGIS
|
|
||||||
self.assertIn('pointg = models.PointField(geography=True, dim=3)', output)
|
self.assertIn('pointg = models.PointField(geography=True, dim=3)', output)
|
||||||
|
else:
|
||||||
|
self.assertIn('pointg = models.PointField(dim=3)', output)
|
||||||
self.assertIn('line = models.LineStringField(dim=3)', output)
|
self.assertIn('line = models.LineStringField(dim=3)', output)
|
||||||
self.assertIn('poly = models.PolygonField(dim=3)', output)
|
self.assertIn('poly = models.PolygonField(dim=3)', output)
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user