summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/boundfield.py7
-rw-r--r--docs/releases/1.11.1.txt3
-rw-r--r--tests/forms_tests/tests/test_forms.py7
3 files changed, 17 insertions, 0 deletions
diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py
index a1063b2b05..a8e81afe9b 100644
--- a/django/forms/boundfield.py
+++ b/django/forms/boundfield.py
@@ -57,6 +57,13 @@ class BoundField(object):
for widget in self.field.widget.subwidgets(self.html_name, self.value(), attrs=attrs)
)
+ def __bool__(self):
+ # BoundField evaluates to True even if it doesn't have subwidgets.
+ return True
+
+ def __nonzero__(self): # Python 2 compatibility
+ return type(self).__bool__(self)
+
def __iter__(self):
return iter(self.subwidgets)
diff --git a/docs/releases/1.11.1.txt b/docs/releases/1.11.1.txt
index e7f2638881..953a6e8889 100644
--- a/docs/releases/1.11.1.txt
+++ b/docs/releases/1.11.1.txt
@@ -24,3 +24,6 @@ Bugfixes
* Fixed empty POST data table appearing instead of "No POST data" in HTML debug
page (:ticket:`28079`).
+
+* Restored ``BoundField``\s without any ``choices`` evaluating to ``True``
+ (:ticket:`28058`).
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 2b93575bf2..ffad6f60a6 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -745,6 +745,13 @@ Java</label></li>
[str(bf[1]), str(bf[2]), str(bf[3])],
)
+ def test_boundfield_bool(self):
+ """BoundField without any choices (subwidgets) evaluates to True."""
+ class TestForm(Form):
+ name = ChoiceField(choices=[])
+
+ self.assertIs(bool(TestForm()['name']), True)
+
def test_forms_with_multiple_choice(self):
# MultipleChoiceField is a special case, as its data is required to be a list:
class SongForm(Form):