From bb51dc902dc760b6fd03b860335fd99f47e2e13d Mon Sep 17 00:00:00 2001 From: Shai Berger Date: Tue, 26 Jan 2016 00:50:46 +0200 Subject: 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. --- django/contrib/gis/db/models/sql/conversion.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'django') 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}) -- cgit v1.3