1
0
mirror of https://github.com/django/django.git synced 2025-05-06 06:56:30 +00:00

[1.11.x] Fixed #28105 -- Fixed crash in BaseGeometryWidget.get_context() when overriding existing attrs.

Backport of 75aeebebfe3df3ea46b8e12dd5e7719f98664d3a from master
This commit is contained in:
Dylan Verheul 2017-04-29 15:35:46 +02:00 committed by Tim Graham
parent a2975cb083
commit b1aea89dee
3 changed files with 20 additions and 9 deletions

View File

@ -65,15 +65,16 @@ class BaseGeometryWidget(Widget):
if attrs is None: if attrs is None:
attrs = {} attrs = {}
context.update(self.build_attrs(self.attrs, dict( build_attrs_kwargs = {
name=name, 'name': name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe 'module': 'geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value), 'serialized': self.serialize(value),
geom_type=gdal.OGRGeomType(self.attrs['geom_type']), 'geom_type': gdal.OGRGeomType(self.attrs['geom_type']),
STATIC_URL=settings.STATIC_URL, 'STATIC_URL': settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(), 'LANGUAGE_BIDI': translation.get_language_bidi(),
**attrs }
))) build_attrs_kwargs.update(attrs)
context.update(self.build_attrs(self.attrs, build_attrs_kwargs))
return context return context

View File

@ -66,3 +66,6 @@ Bugfixes
* Updated the ``contrib.postgres`` ``SplitArrayWidget`` to use template-based * Updated the ``contrib.postgres`` ``SplitArrayWidget`` to use template-based
widget rendering (:ticket:`28040`). widget rendering (:ticket:`28040`).
* Fixed crash in ``BaseGeometryWidget.get_context()`` when overriding existing
``attrs`` (:ticket:`28105`).

View File

@ -1,6 +1,7 @@
import re import re
from django.contrib.gis import forms from django.contrib.gis import forms
from django.contrib.gis.forms import BaseGeometryWidget
from django.contrib.gis.geos import GEOSGeometry from django.contrib.gis.geos import GEOSGeometry
from django.forms import ValidationError from django.forms import ValidationError
from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
@ -353,6 +354,12 @@ class OSMWidgetTest(SimpleTestCase):
@skipUnlessDBFeature("gis_enabled") @skipUnlessDBFeature("gis_enabled")
class GeometryWidgetTests(SimpleTestCase): class GeometryWidgetTests(SimpleTestCase):
def test_get_context_attrs(self):
"""The Widget.get_context() attrs argument overrides self.attrs."""
widget = BaseGeometryWidget(attrs={'geom_type': 'POINT'})
context = widget.get_context('point', None, attrs={'geom_type': 'POINT2'})
self.assertEqual(context['geom_type'], 'POINT2')
def test_subwidgets(self): def test_subwidgets(self):
widget = forms.BaseGeometryWidget() widget = forms.BaseGeometryWidget()
self.assertEqual( self.assertEqual(