summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorShai Berger <shai@platonix.com>2016-01-26 00:50:46 +0200
committerTim Graham <timograham@gmail.com>2016-02-09 10:04:54 -0500
commitbb51dc902dc760b6fd03b860335fd99f47e2e13d (patch)
tree88a42d1a13d52e5cb725f959163484f8be343f90 /django
parent75143fa13f4f1ad2be84a103f7ce0eef9d06d3b4 (diff)
Refs #26112 -- Fixed aggregate GIS test on Oracle.
Made sure the test doesn't try to aggregate over MultiPolygonField and made AreaField turn decimals into floats on the way from the DB. Thanks Daniel Wiesmann, Jani Tiainen, and Tim Graham for review and discussion.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/gis/db/models/sql/conversion.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/django/contrib/gis/db/models/sql/conversion.py b/django/contrib/gis/db/models/sql/conversion.py
index afc1053790..acc277ed62 100644
--- a/django/contrib/gis/db/models/sql/conversion.py
+++ b/django/contrib/gis/db/models/sql/conversion.py
@@ -4,6 +4,8 @@ database.
"""
from __future__ import unicode_literals
+from decimal import Decimal
+
from django.contrib.gis.db.models.fields import GeoSelectFormatMixin
from django.contrib.gis.geometry.backend import Geometry
from django.contrib.gis.measure import Area, Distance
@@ -27,6 +29,10 @@ class AreaField(BaseField):
def from_db_value(self, value, expression, connection, context):
if connection.features.interprets_empty_strings_as_nulls and value == '':
value = None
+ # If the database returns a Decimal, convert it to a float as expected
+ # by the Python geometric objects.
+ if isinstance(value, Decimal):
+ value = float(value)
# If the units are known, convert value into area measure.
if value is not None and self.area_att:
value = Area(**{self.area_att: value})