summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/forms.py12
-rw-r--r--tests/forms_tests/tests/test_forms.py24
2 files changed, 36 insertions, 0 deletions
diff --git a/django/forms/forms.py b/django/forms/forms.py
index e5df320673..d631b8f928 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -134,6 +134,18 @@ class BaseForm(object):
def __str__(self):
return self.as_table()
+ def __repr__(self):
+ if self._errors is None:
+ is_valid = "Unknown"
+ else:
+ is_valid = self.is_bound and not bool(self._errors)
+ return '<%(cls)s bound=%(bound)s, valid=%(valid)s, fields=(%(fields)s)>' % {
+ 'cls': self.__class__.__name__,
+ 'bound': self.is_bound,
+ 'valid': is_valid,
+ 'fields': ';'.join(self.fields),
+ }
+
def __iter__(self):
for name in self.fields:
yield self[name]
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 0d8ae663a6..a0c858a5ed 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -2338,3 +2338,27 @@ class FormsTestCase(TestCase):
<tr><th><label for="id_first_name">First name:</label></th><td><input id="id_first_name" name="first_name" type="text" value="John" /></td></tr>
<tr><th><label for="id_last_name">Last name:</label></th><td><input id="id_last_name" name="last_name" type="text" value="Lennon" /></td></tr>"""
)
+
+ def test_baseform_repr(self):
+ """
+ Test for baseForm method __repr__
+ """
+ p = Person()
+ self.assertEqual(repr(p), "<Person bound=False, valid=Unknown, fields=(first_name;last_name;birthday)>")
+ p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': '1940-10-9'})
+ self.assertEqual(repr(p), "<Person bound=True, valid=Unknown, fields=(first_name;last_name;birthday)>")
+ p.is_valid()
+ self.assertEqual(repr(p), "<Person bound=True, valid=True, fields=(first_name;last_name;birthday)>")
+ p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': 'fakedate'})
+ p.is_valid()
+ self.assertEqual(repr(p), "<Person bound=True, valid=False, fields=(first_name;last_name;birthday)>")
+
+ def test_baseform_repr_dont_trigger_validation(self):
+ """
+ Test to verify that __repr__ method don't trigger the validation
+ """
+ p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': 'fakedate'})
+ repr(p)
+ self.assertRaises(AttributeError, lambda: p.cleaned_data)
+ self.assertFalse(p.is_valid())
+ self.assertEqual(p.cleaned_data, {'first_name': 'John', 'last_name': 'Lennon'})