Fixed #26267 -- Fixed BoundField to reallow slices of subwidgets.

This commit is contained in:
Jon Dufresne 2016-02-23 15:39:20 -08:00 committed by Tim Graham
parent 1ff6e37de4
commit b412681359
5 changed files with 20 additions and 1 deletions

View File

@ -60,7 +60,7 @@ class BoundField(object):
def __getitem__(self, idx): def __getitem__(self, idx):
# Prevent unnecessary reevaluation when accessing BoundField's attrs # Prevent unnecessary reevaluation when accessing BoundField's attrs
# from templates. # from templates.
if not isinstance(idx, six.integer_types): if not isinstance(idx, six.integer_types + (slice,)):
raise TypeError raise TypeError
return list(self.__iter__())[idx] return list(self.__iter__())[idx]

View File

@ -24,3 +24,5 @@ Bugfixes
* Reallowed dashes in top-level domain names of URLs checked by * Reallowed dashes in top-level domain names of URLs checked by
``URLValidator`` to fix a regression in Django 1.8 (:ticket:`26204`). ``URLValidator`` to fix a regression in Django 1.8 (:ticket:`26204`).
* Fixed ``BoundField`` to reallow slices of subwidgets (:ticket:`26267`).

View File

@ -40,3 +40,5 @@ Bugfixes
* Fixed some crashing deprecation shims in ``SimpleTemplateResponse`` that * Fixed some crashing deprecation shims in ``SimpleTemplateResponse`` that
regressed in Django 1.9 (:ticket:`26253`). regressed in Django 1.9 (:ticket:`26253`).
* Fixed ``BoundField`` to reallow slices of subwidgets (:ticket:`26267`).

View File

@ -632,6 +632,7 @@ quoteless
Radziej Radziej
rc rc
readded readded
reallow
reallowed reallowed
rebase rebase
rebased rebased

View File

@ -661,6 +661,20 @@ class FormsTestCase(SimpleTestCase):
f = BeatleForm(auto_id=False) f = BeatleForm(auto_id=False)
self.assertHTMLEqual('\n'.join(str(bf) for bf in f['name']), '<input type="text" name="name" />') self.assertHTMLEqual('\n'.join(str(bf) for bf in f['name']), '<input type="text" name="name" />')
def test_boundfield_slice(self):
class BeatleForm(Form):
name = ChoiceField(
choices=[('john', 'John'), ('paul', 'Paul'), ('george', 'George'), ('ringo', 'Ringo')],
widget=RadioSelect,
)
f = BeatleForm()
bf = f['name']
self.assertEqual(
[str(item) for item in bf[1:]],
[str(bf[1]), str(bf[2]), str(bf[3])],
)
def test_forms_with_multiple_choice(self): def test_forms_with_multiple_choice(self):
# MultipleChoiceField is a special case, as its data is required to be a list: # MultipleChoiceField is a special case, as its data is required to be a list:
class SongForm(Form): class SongForm(Form):