Loading django/contrib/gis/serializers/geojson.py +3 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ class Serializer(JSONSerializer): "type": "Feature", "properties": self._current, } if ((self.selected_fields is None or 'pk' in self.selected_fields) and 'pk' not in data["properties"]): data["properties"]["pk"] = obj._meta.pk.value_to_string(obj) if self._geometry: if self._geometry.srid != self.srid: # If needed, transform the geometry in the srid of the global geojson srid Loading docs/ref/contrib/gis/serializers.txt +8 −0 Original line number Diff line number Diff line Loading @@ -71,3 +71,11 @@ Would output:: } ] } When the ``fields`` parameter is not specified, the ``geojson`` serializer adds a ``pk`` key to the ``properties`` dictionary with the primary key of the object as the value. .. versionchanged:: 1.10 The ``pk`` key was added to the ``properties`` dictionary. docs/releases/1.10.txt +4 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,10 @@ Minor features :attr:`MultiLineString.closed <django.contrib.gis.geos.MultiLineString.closed>` properties. * The :doc:`GeoJSON serializer </ref/contrib/gis/serializers>` now outputs the primary key of objects in the ``properties`` dictionary if specific fields aren't specified. :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading tests/gis_tests/geoapp/test_serializers.py +3 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class GeoJSONSerializerTests(TestCase): self.assertEqual(len(geodata['features']), len(City.objects.all())) self.assertEqual(geodata['features'][0]['geometry']['type'], 'Point') self.assertEqual(geodata['features'][0]['properties']['name'], 'Chicago') first_city = City.objects.all().order_by('name').first() self.assertEqual(geodata['features'][0]['properties']['pk'], str(first_city.pk)) def test_geometry_field_option(self): """ Loading Loading @@ -76,6 +78,7 @@ class GeoJSONSerializerTests(TestCase): geodata = json.loads(geojson) self.assertIn('county', geodata['features'][0]['properties']) self.assertNotIn('founded', geodata['features'][0]['properties']) self.assertNotIn('pk', geodata['features'][0]['properties']) def test_srid_option(self): geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847) Loading Loading
django/contrib/gis/serializers/geojson.py +3 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ class Serializer(JSONSerializer): "type": "Feature", "properties": self._current, } if ((self.selected_fields is None or 'pk' in self.selected_fields) and 'pk' not in data["properties"]): data["properties"]["pk"] = obj._meta.pk.value_to_string(obj) if self._geometry: if self._geometry.srid != self.srid: # If needed, transform the geometry in the srid of the global geojson srid Loading
docs/ref/contrib/gis/serializers.txt +8 −0 Original line number Diff line number Diff line Loading @@ -71,3 +71,11 @@ Would output:: } ] } When the ``fields`` parameter is not specified, the ``geojson`` serializer adds a ``pk`` key to the ``properties`` dictionary with the primary key of the object as the value. .. versionchanged:: 1.10 The ``pk`` key was added to the ``properties`` dictionary.
docs/releases/1.10.txt +4 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,10 @@ Minor features :attr:`MultiLineString.closed <django.contrib.gis.geos.MultiLineString.closed>` properties. * The :doc:`GeoJSON serializer </ref/contrib/gis/serializers>` now outputs the primary key of objects in the ``properties`` dictionary if specific fields aren't specified. :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading
tests/gis_tests/geoapp/test_serializers.py +3 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class GeoJSONSerializerTests(TestCase): self.assertEqual(len(geodata['features']), len(City.objects.all())) self.assertEqual(geodata['features'][0]['geometry']['type'], 'Point') self.assertEqual(geodata['features'][0]['properties']['name'], 'Chicago') first_city = City.objects.all().order_by('name').first() self.assertEqual(geodata['features'][0]['properties']['pk'], str(first_city.pk)) def test_geometry_field_option(self): """ Loading Loading @@ -76,6 +78,7 @@ class GeoJSONSerializerTests(TestCase): geodata = json.loads(geojson) self.assertIn('county', geodata['features'][0]['properties']) self.assertNotIn('founded', geodata['features'][0]['properties']) self.assertNotIn('pk', geodata['features'][0]['properties']) def test_srid_option(self): geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847) Loading