Fixed #28075 -- Prevented ChoiceWidget from localizing option values.
This commit is contained in:
parent
87f9a3c5b2
commit
581879a510
|
@ -594,7 +594,7 @@ class ChoiceWidget(Widget):
|
||||||
option_attrs['id'] = self.id_for_label(option_attrs['id'], index)
|
option_attrs['id'] = self.id_for_label(option_attrs['id'], index)
|
||||||
return {
|
return {
|
||||||
'name': name,
|
'name': name,
|
||||||
'value': value,
|
'value': str(value),
|
||||||
'label': label,
|
'label': label,
|
||||||
'selected': selected,
|
'selected': selected,
|
||||||
'index': index,
|
'index': index,
|
||||||
|
|
|
@ -45,3 +45,7 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed exception reraising in ORM query execution when ``cursor.execute()``
|
* Fixed exception reraising in ORM query execution when ``cursor.execute()``
|
||||||
fails and the subsequent ``cursor.close()`` also fails (:ticket:`28091`).
|
fails and the subsequent ``cursor.close()`` also fails (:ticket:`28091`).
|
||||||
|
|
||||||
|
* Fixed a regression where ``CheckboxSelectMultiple``, ``NullBooleanSelect``,
|
||||||
|
``RadioSelect``, ``SelectMultiple``, and ``Select`` localized option values
|
||||||
|
(:ticket:`28075`).
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import CheckboxSelectMultiple
|
from django.forms import CheckboxSelectMultiple
|
||||||
|
from django.test import override_settings
|
||||||
|
|
||||||
from .base import WidgetTest
|
from .base import WidgetTest
|
||||||
|
|
||||||
|
@ -149,6 +152,34 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||||
"""
|
"""
|
||||||
self.check_html(widget, 'letters', ['a', 'c'], html=html)
|
self.check_html(widget, 'letters', ['a', 'c'], html=html)
|
||||||
|
|
||||||
|
@override_settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True)
|
||||||
|
def test_doesnt_localize_input_value(self):
|
||||||
|
choices = [
|
||||||
|
(1, 'One'),
|
||||||
|
(1000, 'One thousand'),
|
||||||
|
(1000000, 'One million'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<ul>
|
||||||
|
<li><label><input type="checkbox" name="numbers" value="1" /> One</label></li>
|
||||||
|
<li><label><input type="checkbox" name="numbers" value="1000" /> One thousand</label></li>
|
||||||
|
<li><label><input type="checkbox" name="numbers" value="1000000" /> One million</label></li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'numbers', None, html=html)
|
||||||
|
|
||||||
|
choices = [
|
||||||
|
(datetime.time(0, 0), 'midnight'),
|
||||||
|
(datetime.time(12, 0), 'noon'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<ul>
|
||||||
|
<li><label><input type="checkbox" name="times" value="00:00:00" /> midnight</label></li>
|
||||||
|
<li><label><input type="checkbox" name="times" value="12:00:00" /> noon</label></li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'times', None, html=html)
|
||||||
|
|
||||||
def test_use_required_attribute(self):
|
def test_use_required_attribute(self):
|
||||||
widget = self.widget(choices=self.beatles)
|
widget = self.widget(choices=self.beatles)
|
||||||
# Always False because browser validation would require all checkboxes
|
# Always False because browser validation would require all checkboxes
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
from django.forms import RadioSelect
|
from django.forms import RadioSelect
|
||||||
|
from django.test import override_settings
|
||||||
|
|
||||||
from .base import WidgetTest
|
from .base import WidgetTest
|
||||||
|
|
||||||
|
@ -99,3 +102,31 @@ class RadioSelectTest(WidgetTest):
|
||||||
</ul>
|
</ul>
|
||||||
"""
|
"""
|
||||||
self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'class': 'bar'}, html=html)
|
self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'class': 'bar'}, html=html)
|
||||||
|
|
||||||
|
@override_settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True)
|
||||||
|
def test_doesnt_localize_input_value(self):
|
||||||
|
choices = [
|
||||||
|
(1, 'One'),
|
||||||
|
(1000, 'One thousand'),
|
||||||
|
(1000000, 'One million'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<ul>
|
||||||
|
<li><label><input type="radio" name="number" value="1" /> One</label></li>
|
||||||
|
<li><label><input type="radio" name="number" value="1000" /> One thousand</label></li>
|
||||||
|
<li><label><input type="radio" name="number" value="1000000" /> One million</label></li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'number', None, html=html)
|
||||||
|
|
||||||
|
choices = [
|
||||||
|
(datetime.time(0, 0), 'midnight'),
|
||||||
|
(datetime.time(12, 0), 'noon'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<ul>
|
||||||
|
<li><label><input type="radio" name="time" value="00:00:00" /> midnight</label></li>
|
||||||
|
<li><label><input type="radio" name="time" value="12:00:00" /> noon</label></li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'time', None, html=html)
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import copy
|
import copy
|
||||||
|
import datetime
|
||||||
|
|
||||||
from django.forms import Select
|
from django.forms import Select
|
||||||
|
from django.test import override_settings
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
from .base import WidgetTest
|
from .base import WidgetTest
|
||||||
|
@ -218,6 +220,34 @@ class SelectTest(WidgetTest):
|
||||||
</select>"""
|
</select>"""
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@override_settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True)
|
||||||
|
def test_doesnt_localize_option_value(self):
|
||||||
|
choices = [
|
||||||
|
(1, 'One'),
|
||||||
|
(1000, 'One thousand'),
|
||||||
|
(1000000, 'One million'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<select name="number">
|
||||||
|
<option value="1">One</option>
|
||||||
|
<option value="1000">One thousand</option>
|
||||||
|
<option value="1000000">One million</option>
|
||||||
|
</select>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'number', None, html=html)
|
||||||
|
|
||||||
|
choices = [
|
||||||
|
(datetime.time(0, 0), 'midnight'),
|
||||||
|
(datetime.time(12, 0), 'noon'),
|
||||||
|
]
|
||||||
|
html = """
|
||||||
|
<select name="time">
|
||||||
|
<option value="00:00:00">midnight</option>
|
||||||
|
<option value="12:00:00">noon</option>
|
||||||
|
</select>
|
||||||
|
"""
|
||||||
|
self.check_html(self.widget(choices=choices), 'time', None, html=html)
|
||||||
|
|
||||||
def test_options(self):
|
def test_options(self):
|
||||||
options = list(self.widget(choices=self.beatles).options(
|
options = list(self.widget(choices=self.beatles).options(
|
||||||
'name', ['J'], attrs={'class': 'super'},
|
'name', ['J'], attrs={'class': 'super'},
|
||||||
|
|
Loading…
Reference in New Issue