From 682e435c5f334bc0211b12f05398fe79e4e72713 Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Mon, 27 Nov 2006 01:55:24 +0000 Subject: [PATCH] newforms: Changed Form.errors to be a property rather than a function. Refs #3026 git-svn-id: http://code.djangoproject.com/svn/django/trunk@4116 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/newforms/forms.py | 17 +++++++++-------- tests/regressiontests/forms/tests.py | 24 ++++++++++++------------ 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/django/newforms/forms.py b/django/newforms/forms.py index f04e04926a..f58ce2c563 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -56,19 +56,20 @@ class Form(object): raise KeyError('Key %r not found in Form' % name) return BoundField(self, field, name) - def errors(self): + def _errors(self): "Returns an ErrorDict for self.data" if self.__errors is None: self.full_clean() return self.__errors + errors = property(_errors) def is_valid(self): """ Returns True if the form has no errors. Otherwise, False. This exists solely for convenience, so client code can use positive logic rather - than confusing negative logic ("if not form.errors()"). + than confusing negative logic ("if not form.errors"). """ - return not bool(self.errors()) + return not bool(self.errors) def as_table(self): "Returns this form rendered as HTML s -- excluding the
." @@ -81,9 +82,9 @@ class Form(object): def as_table_with_errors(self): "Returns this form rendered as HTML s, with errors." output = [] - if self.errors().get(NON_FIELD_ERRORS): + if self.errors.get(NON_FIELD_ERRORS): # Errors not corresponding to a particular field are displayed at the top. - output.append(u'' % u'\n'.join([u'
  • %s
  • ' % e for e in self.errors()[NON_FIELD_ERRORS]])) + output.append(u'' % u'\n'.join([u'
  • %s
  • ' % e for e in self.errors[NON_FIELD_ERRORS]])) for name, field in self.fields.items(): bf = BoundField(self, field, name) if bf.errors: @@ -94,9 +95,9 @@ class Form(object): def as_ul_with_errors(self): "Returns this form rendered as HTML
  • s, with errors." output = [] - if self.errors().get(NON_FIELD_ERRORS): + if self.errors.get(NON_FIELD_ERRORS): # Errors not corresponding to a particular field are displayed at the top. - output.append(u'
  • ' % u'\n'.join([u'
  • %s
  • ' % e for e in self.errors()[NON_FIELD_ERRORS]])) + output.append(u'
  • ' % u'\n'.join([u'
  • %s
  • ' % e for e in self.errors[NON_FIELD_ERRORS]])) for name, field in self.fields.items(): bf = BoundField(self, field, name) line = u'
  • ' @@ -162,7 +163,7 @@ class BoundField(object): if there are none. """ try: - return self._form.errors()[self._name] + return self._form.errors[self._name] except KeyError: return ErrorList() errors = property(_errors) diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index e588b6572b..3d7543badd 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -1163,13 +1163,13 @@ u''
  • Birthday:
  • >>> p = Person({'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9'}) ->>> p.errors() +>>> p.errors {} >>> p.is_valid() True ->>> p.errors().as_ul() +>>> p.errors.as_ul() u'' ->>> p.errors().as_text() +>>> p.errors.as_text() u'' >>> p.clean() {'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)} @@ -1197,13 +1197,13 @@ u'First name:First name: \n
  • Last name:
  • \n
  • Birthday:
  • ' >>> p = Person({'last_name': u'Lennon'}) ->>> p.errors() +>>> p.errors {'first_name': [u'This field is required.'], 'birthday': [u'This field is required.']} >>> p.is_valid() False ->>> p.errors().as_ul() +>>> p.errors.as_ul() u'' ->>> print p.errors().as_text() +>>> print p.errors.as_text() * first_name * This field is required. * birthday @@ -1385,13 +1385,13 @@ Field.clean(), the clean_XXX() method should return the cleaned value: ... raise ValidationError(u'Please make sure your passwords match.') ... return self.clean_data['password2'] >>> f = UserRegistration() ->>> f.errors() +>>> f.errors {'username': [u'This field is required.'], 'password1': [u'This field is required.'], 'password2': [u'This field is required.']} >>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}) ->>> f.errors() +>>> f.errors {'password2': [u'Please make sure your passwords match.']} >>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}) ->>> f.errors() +>>> f.errors {} >>> f.clean() {'username': u'adrian', 'password1': u'foo', 'password2': u'foo'} @@ -1414,10 +1414,10 @@ Form.clean() still needs to return a dictionary of all clean data: Username: Password1: Password2: ->>> f.errors() +>>> f.errors {'username': [u'This field is required.'], 'password1': [u'This field is required.'], 'password2': [u'This field is required.']} >>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}) ->>> f.errors() +>>> f.errors {'__all__': [u'Please make sure your passwords match.']} >>> print f.as_table() Username: @@ -1434,7 +1434,7 @@ Form.clean() still needs to return a dictionary of all clean data:
  • Password1:
  • Password2:
  • >>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}) ->>> f.errors() +>>> f.errors {} >>> f.clean() {'username': u'adrian', 'password1': u'foo', 'password2': u'foo'}