Commit 6c48edae authored by Jon Dufresne's avatar Jon Dufresne Committed by Tim Graham
Browse files

[1.8.x] Fixed #26267 -- Fixed BoundField to reallow slices of subwidgets.

Backport of b4126813 from master
parent 751e5fca
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -554,7 +554,7 @@ class BoundField(object):
    def __getitem__(self, idx):
        # Prevent unnecessary reevaluation when accessing BoundField's attrs
        # from templates.
        if not isinstance(idx, six.integer_types):
        if not isinstance(idx, six.integer_types + (slice,)):
            raise TypeError
        return list(self.__iter__())[idx]

+2 −0
Original line number Diff line number Diff line
@@ -24,3 +24,5 @@ Bugfixes

* Reallowed dashes in top-level domain names of URLs checked by
  ``URLValidator`` to fix a regression in Django 1.8 (:ticket:`26204`).

* Fixed ``BoundField`` to reallow slices of subwidgets (:ticket:`26267`).
+1 −0
Original line number Diff line number Diff line
@@ -512,6 +512,7 @@ quoteless
Radziej
rc
readded
reallow
reallowed
rebase
rebased
+14 −0
Original line number Diff line number Diff line
@@ -468,6 +468,20 @@ class FormsTestCase(TestCase):
        f = BeatleForm(auto_id=False)
        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):
        # MultipleChoiceField is a special case, as its data is required to be a list:
        class SongForm(Form):