mirror of https://github.com/django/django.git
Fixed #26266 -- Output the primary key in the GeoJSON serializer properties
Thanks Tim Graham for the review.
This commit is contained in:
parent
6637cd0ef2
commit
c5517b9e74
|
@ -47,6 +47,9 @@ class Serializer(JSONSerializer):
|
||||||
"type": "Feature",
|
"type": "Feature",
|
||||||
"properties": self._current,
|
"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:
|
||||||
if self._geometry.srid != self.srid:
|
if self._geometry.srid != self.srid:
|
||||||
# If needed, transform the geometry in the srid of the global geojson srid
|
# If needed, transform the geometry in the srid of the global geojson srid
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -131,6 +131,10 @@ Minor features
|
||||||
:attr:`MultiLineString.closed
|
:attr:`MultiLineString.closed
|
||||||
<django.contrib.gis.geos.MultiLineString.closed>` properties.
|
<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`
|
:mod:`django.contrib.messages`
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ class GeoJSONSerializerTests(TestCase):
|
||||||
self.assertEqual(len(geodata['features']), len(City.objects.all()))
|
self.assertEqual(len(geodata['features']), len(City.objects.all()))
|
||||||
self.assertEqual(geodata['features'][0]['geometry']['type'], 'Point')
|
self.assertEqual(geodata['features'][0]['geometry']['type'], 'Point')
|
||||||
self.assertEqual(geodata['features'][0]['properties']['name'], 'Chicago')
|
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):
|
def test_geometry_field_option(self):
|
||||||
"""
|
"""
|
||||||
|
@ -76,6 +78,7 @@ class GeoJSONSerializerTests(TestCase):
|
||||||
geodata = json.loads(geojson)
|
geodata = json.loads(geojson)
|
||||||
self.assertIn('county', geodata['features'][0]['properties'])
|
self.assertIn('county', geodata['features'][0]['properties'])
|
||||||
self.assertNotIn('founded', geodata['features'][0]['properties'])
|
self.assertNotIn('founded', geodata['features'][0]['properties'])
|
||||||
|
self.assertNotIn('pk', geodata['features'][0]['properties'])
|
||||||
|
|
||||||
def test_srid_option(self):
|
def test_srid_option(self):
|
||||||
geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847)
|
geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847)
|
||||||
|
|
Loading…
Reference in New Issue