Commit 54236a2c authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #26138 -- Ensured geometry_field's geometry is always serialized

Thanks Bernd Schlapsi for the report.
parent 31817dd2
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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()
+3 −0
Original line number Diff line number Diff line
@@ -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`).
+15 −2
Original line number Diff line number Diff line
@@ -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')