Fixed #28058 -- Restored empty BoundFields evaluating to True.

Regression in b52c73008a
This commit is contained in:
Tim Graham 2017-04-15 13:01:38 -04:00
parent e5dce7b0fb
commit c09bf8d767
3 changed files with 14 additions and 0 deletions

View File

@ -53,6 +53,10 @@ class BoundField:
for widget in self.field.widget.subwidgets(self.html_name, self.value(), attrs=attrs) 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 __iter__(self): def __iter__(self):
return iter(self.subwidgets) return iter(self.subwidgets)

View File

@ -24,3 +24,6 @@ Bugfixes
* Fixed empty POST data table appearing instead of "No POST data" in HTML debug * Fixed empty POST data table appearing instead of "No POST data" in HTML debug
page (:ticket:`28079`). page (:ticket:`28079`).
* Restored ``BoundField``\s without any ``choices`` evaluating to ``True``
(:ticket:`28058`).

View File

@ -746,6 +746,13 @@ Java</label></li>
[str(bf[1]), str(bf[2]), str(bf[3])], [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): 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):