diff options
| author | Baptiste Mispelon <bmispelon@gmail.com> | 2013-04-07 10:37:38 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2013-04-13 11:09:47 +0200 |
| commit | 844fbc85c1d419ed7ecbb7208bd392c1770ea72d (patch) | |
| tree | 2138cb0b0d8a8a1af3c7b5ec049caa2d64bb7c2f | |
| parent | 3f05c70be065fd915d2cddc1e7f74d1d4cb1e54e (diff) | |
Fixed #19874: Apply id attribute to the outer <ul> of CheckboxSelectMultiple
| -rw-r--r-- | django/forms/widgets.py | 3 | ||||
| -rw-r--r-- | docs/ref/forms/widgets.txt | 5 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_forms.py | 2 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_widgets.py | 4 |
4 files changed, 10 insertions, 4 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index ba6f9c5b9a..41263b0905 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -690,7 +690,8 @@ class CheckboxSelectMultiple(SelectMultiple): if value is None: value = [] final_attrs = self.build_attrs(attrs, name=name) id_ = final_attrs.get('id', None) - output = ['<ul>'] + start_tag = format_html('<ul id="{0}">', id_) if id_ else '<ul>' + output = [start_tag] # Normalize to strings str_values = set([force_text(v) for v in value]) for i, (option_value, option_label) in enumerate(chain(self.choices, choices)): diff --git a/docs/ref/forms/widgets.txt b/docs/ref/forms/widgets.txt index 7218e41082..45d9e8a4dc 100644 --- a/docs/ref/forms/widgets.txt +++ b/docs/ref/forms/widgets.txt @@ -648,6 +648,11 @@ Selector and checkbox widgets ... </ul> +.. versionchanged:: 1.6 + +The outer ``<ul>`` container will now receive the ``id`` attribute defined on +the widget. + .. _file-upload-widgets: File upload widgets diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index cf63acb57c..49a93b2ad0 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -533,7 +533,7 @@ class FormsTestCase(TestCase): composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple) f = SongForm(auto_id='%s_id') - self.assertHTMLEqual(str(f['composers']), """<ul> + self.assertHTMLEqual(str(f['composers']), """<ul id="composers_id"> <li><label for="composers_id_0"><input type="checkbox" name="composers" value="J" id="composers_id_0" /> John Lennon</label></li> <li><label for="composers_id_1"><input type="checkbox" name="composers" value="P" id="composers_id_1" /> Paul McCartney</label></li> </ul>""") diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py index 00e45b6b02..2ecdb1d065 100644 --- a/tests/forms_tests/tests/test_widgets.py +++ b/tests/forms_tests/tests/test_widgets.py @@ -804,14 +804,14 @@ beatle J R Ringo False""") self.assertHTMLEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), '<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>') # Each input gets a separate ID - self.assertHTMLEqual(CheckboxSelectMultiple().render('letters', list('ac'), choices=zip(list('abc'), list('ABC')), attrs={'id': 'abc'}), """<ul> + self.assertHTMLEqual(CheckboxSelectMultiple().render('letters', list('ac'), choices=zip(list('abc'), list('ABC')), attrs={'id': 'abc'}), """<ul id="abc"> <li><label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label></li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li><label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label></li> </ul>""") # Each input gets a separate ID when the ID is passed to the constructor - self.assertHTMLEqual(CheckboxSelectMultiple(attrs={'id': 'abc'}).render('letters', list('ac'), choices=zip(list('abc'), list('ABC'))), """<ul> + self.assertHTMLEqual(CheckboxSelectMultiple(attrs={'id': 'abc'}).render('letters', list('ac'), choices=zip(list('abc'), list('ABC'))), """<ul id="abc"> <li><label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label></li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li><label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label></li> |
