summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHonza Král <honza.kral@gmail.com>2010-01-04 00:22:13 +0000
committerHonza Král <honza.kral@gmail.com>2010-01-04 00:22:13 +0000
commita7c320fea79b8750ab2a8aca84d8e8fb76d8b100 (patch)
tree8bcdf462175d804f8cac2aa8c953333ad684e72a
parent23a3c08bbbed3eb30c5ecce3cd5543c99d5ce883 (diff)
[soc2009/model-validation] Raise UnresolvableValidationError if an error occurs on excluded field
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/model-validation@12072 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/exceptions.py10
-rw-r--r--django/forms/models.py8
-rw-r--r--tests/modeltests/model_forms/models.py6
3 files changed, 18 insertions, 6 deletions
diff --git a/django/core/exceptions.py b/django/core/exceptions.py
index 29da67cfa6..9cdfd22026 100644
--- a/django/core/exceptions.py
+++ b/django/core/exceptions.py
@@ -33,7 +33,7 @@ class FieldError(Exception):
pass
NON_FIELD_ERRORS = '__all__'
-class ValidationError(Exception):
+class BaseValidationError(Exception):
"""An error while validating data."""
def __init__(self, message, code=None, params=None):
import operator
@@ -63,3 +63,11 @@ class ValidationError(Exception):
if hasattr(self, 'message_dict'):
return repr(self.message_dict)
return repr(self.messages)
+
+class ValidationError(BaseValidationError):
+ pass
+
+class UnresolvableValidationError(BaseValidationError):
+ """Validation error that cannot be resolved by the user."""
+ pass
+
diff --git a/django/forms/models.py b/django/forms/models.py
index 12cfcdbfe5..7ab70c6883 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -9,7 +9,7 @@ from django.utils.datastructures import SortedDict
from django.utils.text import get_text_list, capfirst
from django.utils.translation import ugettext_lazy as _, ugettext
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
+from django.core.exceptions import ValidationError, NON_FIELD_ERRORS, UnresolvableValidationError
from django.core.validators import EMPTY_VALUES
from util import ErrorList
from forms import BaseForm, get_declared_fields
@@ -254,10 +254,14 @@ class BaseModelForm(BaseForm):
if k in self.cleaned_data:
del self.cleaned_data[k]
- # what about fields that don't validate but aren't present on the form?
if NON_FIELD_ERRORS in e.message_dict:
raise ValidationError(e.message_dict[NON_FIELD_ERRORS])
+ # there are errors on some fields not displayed in this form
+ if set(e.message_dict.keys()) - set(self.fields.keys() + [NON_FIELD_ERRORS]):
+ raise UnresolvableValidationError(e.message_dict)
+
+
return self.cleaned_data
def save(self, commit=True):
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py
index 90b8219e08..ca5560582a 100644
--- a/tests/modeltests/model_forms/models.py
+++ b/tests/modeltests/model_forms/models.py
@@ -1432,9 +1432,9 @@ False
... exclude = ('quantity',)
>>> form = PriceForm({'price': '6.00'})
>>> form.is_valid()
-False
->>> form.errors
-{'quantity': [u'This field cannot be null.']}
+Traceback (most recent call last):
+ ...
+UnresolvableValidationError: {'quantity': [u'This field cannot be null.']}
# Unique & unique together with null values
>>> class BookForm(ModelForm):