summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/boundfield.py2
-rw-r--r--docs/releases/1.8.10.txt2
-rw-r--r--docs/releases/1.9.3.txt2
-rw-r--r--docs/spelling_wordlist1
-rw-r--r--tests/forms_tests/tests/test_forms.py14
5 files changed, 20 insertions, 1 deletions
diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py
index bcfe2e2a2d..6567c4f08f 100644
--- a/django/forms/boundfield.py
+++ b/django/forms/boundfield.py
@@ -60,7 +60,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]
diff --git a/docs/releases/1.8.10.txt b/docs/releases/1.8.10.txt
index b63ae2abdc..c9fbd0470d 100644
--- a/docs/releases/1.8.10.txt
+++ b/docs/releases/1.8.10.txt
@@ -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`).
diff --git a/docs/releases/1.9.3.txt b/docs/releases/1.9.3.txt
index 1ce0096968..cd7d674864 100644
--- a/docs/releases/1.9.3.txt
+++ b/docs/releases/1.9.3.txt
@@ -40,3 +40,5 @@ Bugfixes
* Fixed some crashing deprecation shims in ``SimpleTemplateResponse`` that
regressed in Django 1.9 (:ticket:`26253`).
+
+* Fixed ``BoundField`` to reallow slices of subwidgets (:ticket:`26267`).
diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist
index e75704177c..744e39ef20 100644
--- a/docs/spelling_wordlist
+++ b/docs/spelling_wordlist
@@ -629,6 +629,7 @@ quoteless
Radziej
rc
readded
+reallow
reallowed
rebase
rebased
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 00d2045786..6492b1eda0 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -661,6 +661,20 @@ class FormsTestCase(SimpleTestCase):
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):