Loading django/forms/formsets.py +4 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,10 @@ class BaseFormSet(StrAndUnicode): def __len__(self): return len(self.forms) def __nonzero__(self): """All formsets have a management form which is not included in the length""" return True def _management_form(self): """Returns the ManagementForm instance for this FormSet.""" if self.is_bound: Loading tests/regressiontests/forms/tests/formsets.py +11 −0 Original line number Diff line number Diff line Loading @@ -805,6 +805,17 @@ class FormsFormsetTestCase(TestCase): self.assertEqual(str(reverse_formset[1]), str(forms[-2])) self.assertEqual(len(reverse_formset), len(forms)) def test_formset_nonzero(self): """ Formsets with no forms should still evaluate as true. Regression test for #15722 """ ChoiceFormset = formset_factory(Choice, extra=0) formset = ChoiceFormset() self.assertEqual(len(formset.forms), 0) self.assertTrue(formset) data = { 'choices-TOTAL_FORMS': '1', # the number of forms rendered 'choices-INITIAL_FORMS': '0', # the number of forms with initial data Loading Loading
django/forms/formsets.py +4 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,10 @@ class BaseFormSet(StrAndUnicode): def __len__(self): return len(self.forms) def __nonzero__(self): """All formsets have a management form which is not included in the length""" return True def _management_form(self): """Returns the ManagementForm instance for this FormSet.""" if self.is_bound: Loading
tests/regressiontests/forms/tests/formsets.py +11 −0 Original line number Diff line number Diff line Loading @@ -805,6 +805,17 @@ class FormsFormsetTestCase(TestCase): self.assertEqual(str(reverse_formset[1]), str(forms[-2])) self.assertEqual(len(reverse_formset), len(forms)) def test_formset_nonzero(self): """ Formsets with no forms should still evaluate as true. Regression test for #15722 """ ChoiceFormset = formset_factory(Choice, extra=0) formset = ChoiceFormset() self.assertEqual(len(formset.forms), 0) self.assertTrue(formset) data = { 'choices-TOTAL_FORMS': '1', # the number of forms rendered 'choices-INITIAL_FORMS': '0', # the number of forms with initial data Loading