summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-01-26 11:06:29 +0100
committerClaude Paroz <claude@2xlibre.net>2016-01-28 08:52:28 +0100
commitca6ab72bb76fefac0188b95e60320466cc8d7610 (patch)
tree8dba548c7533c5c960fb3370cc25ace315fde179
parente47f0c12471b6688b2ace9a0732bf79125ee9086 (diff)
[1.9.x] Fixed #26138 -- Ensured geometry_field's geometry is always serialized
Thanks Bernd Schlapsi for the report. Backport of 54236a2c1c from master.
-rw-r--r--django/contrib/gis/serializers/geojson.py3
-rw-r--r--docs/releases/1.9.2.txt3
-rw-r--r--tests/gis_tests/geoapp/test_serializers.py17
3 files changed, 21 insertions, 2 deletions
diff --git a/django/contrib/gis/serializers/geojson.py b/django/contrib/gis/serializers/geojson.py
index f26147a59a..b26ec2e809 100644
--- a/django/contrib/gis/serializers/geojson.py
+++ b/django/contrib/gis/serializers/geojson.py
@@ -18,6 +18,9 @@ class Serializer(JSONSerializer):
super(Serializer, self)._init_options()
self.geometry_field = self.json_kwargs.pop('geometry_field', None)
self.srid = self.json_kwargs.pop('srid', 4326)
+ if (self.selected_fields is not None and self.geometry_field is not None
+ and self.geometry_field not in self.selected_fields):
+ self.selected_fields = list(self.selected_fields) + [self.geometry_field]
def start_serialization(self):
self._init_options()
diff --git a/docs/releases/1.9.2.txt b/docs/releases/1.9.2.txt
index 6d0288a337..be6eb56295 100644
--- a/docs/releases/1.9.2.txt
+++ b/docs/releases/1.9.2.txt
@@ -85,3 +85,6 @@ Bugfixes
* Fixed a regression in Django 1.8.5 that broke copying a ``SimpleLazyObject``
with ``copy.copy()`` (:ticket:`26122`).
+
+* Always included ``geometry_field`` in the GeoJSON serializer output regardless
+ of the ``fields`` parameter (:ticket:`26138`).
diff --git a/tests/gis_tests/geoapp/test_serializers.py b/tests/gis_tests/geoapp/test_serializers.py
index 1bf3ec0acf..de104b5cda 100644
--- a/tests/gis_tests/geoapp/test_serializers.py
+++ b/tests/gis_tests/geoapp/test_serializers.py
@@ -47,8 +47,21 @@ class GeoJSONSerializerTests(TestCase):
geodata = json.loads(geojson)
self.assertEqual(geodata['features'][0]['geometry']['type'], 'Point')
- geojson = serializers.serialize('geojson', MultiFields.objects.all(),
- geometry_field='poly')
+ geojson = serializers.serialize(
+ 'geojson',
+ MultiFields.objects.all(),
+ geometry_field='poly'
+ )
+ geodata = json.loads(geojson)
+ self.assertEqual(geodata['features'][0]['geometry']['type'], 'Polygon')
+
+ # geometry_field is considered even if not in fields (#26138).
+ geojson = serializers.serialize(
+ 'geojson',
+ MultiFields.objects.all(),
+ geometry_field='poly',
+ fields=('city',)
+ )
geodata = json.loads(geojson)
self.assertEqual(geodata['features'][0]['geometry']['type'], 'Polygon')