Fixed #11160 - Ensure full_clean is called from non_form_errors

Updated FormSet.non_form_errors() to ensure full_clean() has
been called before returning the errors.
This commit is contained in:
Senko Rasic 2013-05-18 13:44:27 +02:00
parent 566e284c56
commit 493aca453a
2 changed files with 21 additions and 4 deletions

View file

@ -972,6 +972,20 @@ class FormsFormsetTestCase(TestCase):
finally:
formsets.DEFAULT_MAX_NUM = _old_DEFAULT_MAX_NUM
def test_non_form_errors_run_full_clean(self):
# Regression test for #11160
# If non_form_errors() is called without calling is_valid() first,
# it should ensure that full_clean() is called.
class BaseCustomFormSet(BaseFormSet):
def clean(self):
raise ValidationError("This is a non-form error")
ChoiceFormSet = formset_factory(Choice, formset=BaseCustomFormSet)
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
self.assertTrue(isinstance(formset.non_form_errors(), ErrorList))
self.assertEqual(list(formset.non_form_errors()),
['This is a non-form error'])
data = {
'choices-TOTAL_FORMS': '1', # the number of forms rendered