Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

newforms: Changed Form so that clean_data only exists if a Form is va…

…lid. Thanks for the idea, Honza Kral

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4284 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit b1f6b376c0593171f2782472574384b121e65de0 1 parent ddb9b7d
@adrianholovaty adrianholovaty authored
Showing with 13 additions and 5 deletions.
  1. +2 −3 django/newforms/forms.py
  2. +11 −2 tests/regressiontests/forms/tests.py
View
5 django/newforms/forms.py
@@ -44,7 +44,6 @@ def __init__(self, data=None, auto_id='id_%s', prefix=None):
self.data = data or {}
self.auto_id = auto_id
self.prefix = prefix
- self.clean_data = None # Stores the data after clean() has been called.
self.__errors = None # Stores the errors after clean() has been called.
def __unicode__(self):
@@ -137,11 +136,11 @@ def full_clean(self):
"""
Cleans all of self.data and populates self.__errors and self.clean_data.
"""
- self.clean_data = {}
errors = ErrorDict()
if self.ignore_errors: # Stop further processing.
self.__errors = errors
return
+ self.clean_data = {}
for name, field in self.fields.items():
# value_from_datadict() gets the data from the dictionary.
# Each widget type knows how to retrieve its own data, because some
@@ -160,7 +159,7 @@ def full_clean(self):
except ValidationError, e:
errors[NON_FIELD_ERRORS] = e.messages
if errors:
- self.clean_data = None
+ delattr(self, 'clean_data')
self.__errors = errors
def clean(self):
View
13 tests/regressiontests/forms/tests.py
@@ -1544,6 +1544,10 @@
{'first_name': [u'This field is required.'], 'last_name': [u'This field is required.'], 'birthday': [u'This field is required.']}
>>> p.is_valid()
False
+>>> p.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'birthday' object has no attribute 'clean_data'
>>> print p
<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
@@ -1572,6 +1576,10 @@
{}
>>> p.is_valid()
False
+>>> p.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'birthday' object has no attribute 'clean_data'
>>> print p
<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
@@ -1611,8 +1619,9 @@
* birthday
* This field is required.
>>> p.clean_data
->>> repr(p.clean_data)
-'None'
+Traceback (most recent call last):
+...
+AttributeError: 'birthday' object has no attribute 'clean_data'
>>> p['first_name'].errors
[u'This field is required.']
>>> p['first_name'].errors.as_ul()
Please sign in to comment.
Something went wrong with that request. Please try again.