Fixed #28176 -- Restored the uncasted option value in ChoiceWidget template context.
This commit is contained in:
parent
dc63ad7ac0
commit
221e6e1817
|
@ -1 +1 @@
|
|||
<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value }}"{% endif %}{% include "django/forms/widgets/attrs.html" %} />
|
||||
<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %} />
|
||||
|
|
|
@ -1 +1 @@
|
|||
<option value="{{ widget.value }}"{% include "django/forms/widgets/attrs.html" %}>{{ widget.label }}</option>
|
||||
<option value="{{ widget.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}>{{ widget.label }}</option>
|
||||
|
|
|
@ -591,7 +591,7 @@ class ChoiceWidget(Widget):
|
|||
option_attrs['id'] = self.id_for_label(option_attrs['id'], index)
|
||||
return {
|
||||
'name': name,
|
||||
'value': str(value),
|
||||
'value': value,
|
||||
'label': label,
|
||||
'selected': selected,
|
||||
'index': index,
|
||||
|
|
|
@ -44,3 +44,10 @@ Bugfixes
|
|||
* Prevented attribute values in the ``django/forms/widgets/attrs.html``
|
||||
template from being localized so that numeric attributes (e.g. ``max`` and
|
||||
``min``) of ``NumberInput`` work correctly (:ticket:`28303`).
|
||||
|
||||
* Removed casting of the option value to a string in the template context of
|
||||
the ``CheckboxSelectMultiple``, ``NullBooleanSelect``, ``RadioSelect``,
|
||||
``SelectMultiple``, and ``Select`` widgets (:ticket:`28176`). In Django
|
||||
1.11.1, casting was added in Python to avoid localization of numeric values
|
||||
in Django templates, but this made some use cases more difficult. Casting is
|
||||
now done in the template using the ``|stringformat:'s'`` filter.
|
||||
|
|
|
@ -348,6 +348,12 @@ class SelectTest(WidgetTest):
|
|||
)
|
||||
self.assertEqual(index, 2)
|
||||
|
||||
def test_optgroups_integer_choices(self):
|
||||
"""The option 'value' is the same type as what's in `choices`."""
|
||||
groups = list(self.widget(choices=[[0, 'choice text']]).optgroups('name', ['vhs']))
|
||||
label, options, index = groups[0]
|
||||
self.assertEqual(options[0]['value'], 0)
|
||||
|
||||
def test_deepcopy(self):
|
||||
"""
|
||||
__deepcopy__() should copy all attributes properly (#25085).
|
||||
|
|
Loading…
Reference in New Issue