summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-04-20 11:36:40 -0400
committerGitHub <noreply@github.com>2017-04-20 11:36:40 -0400
commitd2cb7a2bc11f111be04a29b5e4f92a183b18ba88 (patch)
tree041ae42efc9fb8056c4d0b2aecb975a454a29b99
parent6d7cbe67f0a91ce3c576b41dc5650e1e4cdbd4e2 (diff)
Fixed #28039 -- Fixed crash in BaseGeometryWidget.subwidgets().
-rw-r--r--django/contrib/gis/forms/widgets.py5
-rw-r--r--docs/releases/1.11.1.txt2
-rw-r--r--tests/gis_tests/test_geoforms.py22
3 files changed, 26 insertions, 3 deletions
diff --git a/django/contrib/gis/forms/widgets.py b/django/contrib/gis/forms/widgets.py
index 53853b84f3..82d9f26b1c 100644
--- a/django/contrib/gis/forms/widgets.py
+++ b/django/contrib/gis/forms/widgets.py
@@ -41,6 +41,7 @@ class BaseGeometryWidget(Widget):
return None
def get_context(self, name, value, attrs):
+ context = super().get_context(name, value, attrs)
# If a string reaches here (via a validation error on another
# field) then just reconstruct the Geometry.
if value and isinstance(value, str):
@@ -62,7 +63,7 @@ class BaseGeometryWidget(Widget):
if attrs is None:
attrs = {}
- context = self.build_attrs(self.attrs, dict(
+ context.update(self.build_attrs(self.attrs, dict(
name=name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value),
@@ -70,7 +71,7 @@ class BaseGeometryWidget(Widget):
STATIC_URL=settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(),
**attrs
- ))
+ )))
return context
diff --git a/docs/releases/1.11.1.txt b/docs/releases/1.11.1.txt
index 53c43443aa..1f475ee736 100644
--- a/docs/releases/1.11.1.txt
+++ b/docs/releases/1.11.1.txt
@@ -40,3 +40,5 @@ Bugfixes
* Restored the output of the ``class`` attribute in the ``<ul>`` of widgets
that use the ``multiple_input.html`` template. This fixes
``ModelAdmin.radio_fields`` with ``admin.HORIZONTAL`` (:ticket:`28059`).
+
+* Fixed crash in ``BaseGeometryWidget.subwidgets()`` (:ticket:`28039`).
diff --git a/tests/gis_tests/test_geoforms.py b/tests/gis_tests/test_geoforms.py
index 473cf13913..73521bc2e6 100644
--- a/tests/gis_tests/test_geoforms.py
+++ b/tests/gis_tests/test_geoforms.py
@@ -351,7 +351,27 @@ class OSMWidgetTest(SimpleTestCase):
@skipUnlessDBFeature("gis_enabled")
-class CustomGeometryWidgetTest(SimpleTestCase):
+class GeometryWidgetTests(SimpleTestCase):
+
+ def test_subwidgets(self):
+ widget = forms.BaseGeometryWidget()
+ self.assertEqual(
+ list(widget.subwidgets('name', 'value')),
+ [{
+ 'is_hidden': False,
+ 'attrs': {
+ 'map_srid': 4326,
+ 'map_width': 600,
+ 'geom_type': 'GEOMETRY',
+ 'map_height': 400,
+ 'display_raw': False,
+ },
+ 'name': 'name',
+ 'template_name': '',
+ 'value': 'value',
+ 'required': False,
+ }]
+ )
def test_custom_serialization_widget(self):
class CustomGeometryWidget(forms.BaseGeometryWidget):