summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2010-01-01 21:11:57 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2010-01-01 21:11:57 +0000
commita907e15cad3ede93f8b785007bdf93205b4f431a (patch)
tree42f912d059aae461aa9c70ca4201174c801a022e
parentc2a2b51ac3009739813a7e6ba22f3c7053a30da2 (diff)
downloaddjango-a907e15cad3ede93f8b785007bdf93205b4f431a.tar.gz
[soc2009/model-validation] Renamed Model's clean method to full_validate to be more consistent with django.forms.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/model-validation@12039 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/base.py4
-rw-r--r--django/forms/models.py5
-rw-r--r--docs/ref/models/instances.txt9
-rw-r--r--tests/modeltests/validation/test_custom_messages.py6
-rw-r--r--tests/modeltests/validation/test_unique.py7
-rw-r--r--tests/modeltests/validation/tests.py27
-rw-r--r--tests/modeltests/validation/validators.py16
7 files changed, 37 insertions, 37 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index c83b0fd5b5..eace314fe8 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -644,7 +644,7 @@ class Model(object):
def validate(self):
"""
- Hook for doing any extra model-wide validation after Model.clean() been
+ Hook for doing any extra model-wide validation after clean() has been
called on every field. Any ValidationError raised by this method will
not be associated with a particular field; it will have a special-case
association with the field named '__all__'.
@@ -785,7 +785,7 @@ class Model(object):
'field_label': unicode(field_labels)
}
- def clean(self, exclude=[]):
+ def full_validate(self, exclude=[]):
"""
Cleans all fields and raises ValidationError containing message_dict of
all validation errors if any occur.
diff --git a/django/forms/models.py b/django/forms/models.py
index 124bb3e170..12cfcdbfe5 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -244,7 +244,7 @@ class BaseModelForm(BaseForm):
opts = self._meta
self.instance = make_instance(self, self.instance, opts.fields, opts.exclude)
try:
- self.instance.clean(exclude=self._errors.keys())
+ self.instance.full_validate(exclude=self._errors.keys())
except ValidationError, e:
for k, v in e.message_dict.items():
if k != NON_FIELD_ERRORS:
@@ -257,7 +257,7 @@ class BaseModelForm(BaseForm):
# 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])
-
+
return self.cleaned_data
def save(self, commit=True):
@@ -272,7 +272,6 @@ class BaseModelForm(BaseForm):
fail_message = 'created'
else:
fail_message = 'changed'
-
return save_made_instance(self, self.instance, self._meta.fields, commit, fail_message)
save.alters_data = True
diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt
index ee5a607ff4..3f61d729ff 100644
--- a/docs/ref/models/instances.txt
+++ b/docs/ref/models/instances.txt
@@ -32,9 +32,9 @@ Validating objects
.. versionadded:: 1.2
-To validate your model, just call it's ``clean()`` method:
+To validate your model, just call it's ``full_validate()`` method:
-.. method:: Model.clean([exclude=[]])
+.. method:: Model.full_validate([exclude=[]])
The optional ``exclude`` argument can contain a list of field names that should
be omitted when validating. This method raises ``ValidationError`` containing a
@@ -45,8 +45,9 @@ To add your own validation logic, override the supplied ``validate()`` method:
.. method:: Model.validate()
The ``validate()`` method on ``Model`` by default checks for uniqueness of
-fields and group of fields that are declared to be unique so remember to call
-``super.validate()`` if you want this validation to run.
+fields and group of fields that are declared to be unique so, remember to call
+``self.validate_unique()`` or the superclasses ``validate`` method if you want
+this validation to run.
Any ``ValidationError`` raised in this method will be propagated in the
``message_dict`` under ``NON_FIELD_ERRORS``.
diff --git a/tests/modeltests/validation/test_custom_messages.py b/tests/modeltests/validation/test_custom_messages.py
index 059b7f462d..e543dbd73f 100644
--- a/tests/modeltests/validation/test_custom_messages.py
+++ b/tests/modeltests/validation/test_custom_messages.py
@@ -4,13 +4,13 @@ from models import CustomMessagesModel
class CustomMessagesTest(ValidationTestCase):
def test_custom_complex_validator_message(self):
cmm = CustomMessagesModel(number=42, other=42)
- self.assertFieldFailsValidationWithMessage(cmm.clean, 'number', ['other != me'])
+ self.assertFieldFailsValidationWithMessage(cmm.full_validate, 'number', ['other != me'])
def test_custom_simple_validator_message(self):
cmm = CustomMessagesModel(number=12)
- self.assertFieldFailsValidationWithMessage(cmm.clean, 'number', ['AAARGH'])
+ self.assertFieldFailsValidationWithMessage(cmm.full_validate, 'number', ['AAARGH'])
def test_custom_null_message(self):
cmm = CustomMessagesModel()
- self.assertFieldFailsValidationWithMessage(cmm.clean, 'number', ['NULL'])
+ self.assertFieldFailsValidationWithMessage(cmm.full_validate, 'number', ['NULL'])
diff --git a/tests/modeltests/validation/test_unique.py b/tests/modeltests/validation/test_unique.py
index 618a5578c7..53b1a72e65 100644
--- a/tests/modeltests/validation/test_unique.py
+++ b/tests/modeltests/validation/test_unique.py
@@ -2,9 +2,9 @@ import unittest
from django.conf import settings
from django.db import connection
-
from models import CustomPKModel, UniqueTogetherModel, UniqueFieldsModel, UniqueForDateModel, ModelToValidate
+
class GetUniqueCheckTests(unittest.TestCase):
def test_unique_fields_get_collected(self):
m = UniqueFieldsModel()
@@ -26,7 +26,6 @@ class GetUniqueCheckTests(unittest.TestCase):
), m._get_unique_checks()
)
-
class PerformUniqueChecksTest(unittest.TestCase):
def setUp(self):
# set debug to True to gain access to connection.queries
@@ -43,12 +42,12 @@ class PerformUniqueChecksTest(unittest.TestCase):
l = len(connection.queries)
mtv = ModelToValidate(number=10, name='Some Name')
setattr(mtv, '_adding', True)
- mtv.clean()
+ mtv.full_validate()
self.assertEqual(l+1, len(connection.queries))
def test_primary_key_unique_check_not_performed_when_not_adding(self):
"""Regression test for #12132"""
l = len(connection.queries)
mtv = ModelToValidate(number=10, name='Some Name')
- mtv.clean()
+ mtv.full_validate()
self.assertEqual(l, len(connection.queries))
diff --git a/tests/modeltests/validation/tests.py b/tests/modeltests/validation/tests.py
index 656e9d8216..c00070b2ab 100644
--- a/tests/modeltests/validation/tests.py
+++ b/tests/modeltests/validation/tests.py
@@ -8,50 +8,51 @@ from validators import TestModelsWithValidators
from test_unique import GetUniqueCheckTests, PerformUniqueChecksTest
from test_custom_messages import CustomMessagesTest
+
class BaseModelValidationTests(ValidationTestCase):
def test_missing_required_field_raises_error(self):
mtv = ModelToValidate(f_with_custom_validator=42)
- self.assertFailsValidation(mtv.clean, ['name', 'number'])
-
+ self.assertFailsValidation(mtv.full_validate, ['name', 'number'])
+
def test_with_correct_value_model_validates(self):
mtv = ModelToValidate(number=10, name='Some Name')
- self.assertEqual(None, mtv.clean())
+ self.assertEqual(None, mtv.full_validate())
def test_custom_validate_method_is_called(self):
mtv = ModelToValidate(number=11)
- self.assertFailsValidation(mtv.clean, [NON_FIELD_ERRORS, 'name'])
+ self.assertFailsValidation(mtv.full_validate, [NON_FIELD_ERRORS, 'name'])
def test_wrong_FK_value_raises_error(self):
mtv=ModelToValidate(number=10, name='Some Name', parent_id=3)
- self.assertFailsValidation(mtv.clean, ['parent'])
+ self.assertFailsValidation(mtv.full_validate, ['parent'])
- def test_correct_FK_value_cleans(self):
+ def test_correct_FK_value_validates(self):
parent = ModelToValidate.objects.create(number=10, name='Some Name')
mtv=ModelToValidate(number=10, name='Some Name', parent_id=parent.pk)
- self.assertEqual(None, mtv.clean())
+ self.assertEqual(None, mtv.full_validate())
def test_wrong_email_value_raises_error(self):
mtv = ModelToValidate(number=10, name='Some Name', email='not-an-email')
- self.assertFailsValidation(mtv.clean, ['email'])
+ self.assertFailsValidation(mtv.full_validate, ['email'])
def test_correct_email_value_passes(self):
mtv = ModelToValidate(number=10, name='Some Name', email='valid@email.com')
- self.assertEqual(None, mtv.clean())
+ self.assertEqual(None, mtv.full_validate())
def test_wrong_url_value_raises_error(self):
mtv = ModelToValidate(number=10, name='Some Name', url='not a url')
- self.assertFieldFailsValidationWithMessage(mtv.clean, 'url', [u'Enter a valid value.'])
+ self.assertFieldFailsValidationWithMessage(mtv.full_validate, 'url', [u'Enter a valid value.'])
def test_correct_url_but_nonexisting_gives_404(self):
mtv = ModelToValidate(number=10, name='Some Name', url='http://google.com/we-love-microsoft.html')
- self.assertFieldFailsValidationWithMessage(mtv.clean, 'url', [u'This URL appears to be a broken link.'])
+ self.assertFieldFailsValidationWithMessage(mtv.full_validate, 'url', [u'This URL appears to be a broken link.'])
def test_correct_url_value_passes(self):
mtv = ModelToValidate(number=10, name='Some Name', url='http://www.djangoproject.com/')
- self.assertEqual(None, mtv.clean()) # This will fail if there's no Internet connection
+ self.assertEqual(None, mtv.full_validate()) # This will fail if there's no Internet connection
def test_text_greater_that_charfields_max_length_eaises_erros(self):
mtv = ModelToValidate(number=10, name='Some Name'*100)
- self.assertFailsValidation(mtv.clean, ['name',])
+ self.assertFailsValidation(mtv.full_validate, ['name',])
diff --git a/tests/modeltests/validation/validators.py b/tests/modeltests/validation/validators.py
index ac22afa295..d54aab6234 100644
--- a/tests/modeltests/validation/validators.py
+++ b/tests/modeltests/validation/validators.py
@@ -3,34 +3,34 @@ from unittest import TestCase
from modeltests.validation import ValidationTestCase
from models import *
+
class TestModelsWithValidators(ValidationTestCase):
def test_custom_validator_passes_for_correct_value(self):
mtv = ModelToValidate(number=10, name='Some Name', f_with_custom_validator=42)
- self.assertEqual(None, mtv.clean())
+ self.assertEqual(None, mtv.full_validate())
def test_custom_validator_raises_error_for_incorrect_value(self):
mtv = ModelToValidate(number=10, name='Some Name', f_with_custom_validator=12)
- self.assertFailsValidation(mtv.clean, ['f_with_custom_validator'])
+ self.assertFailsValidation(mtv.full_validate, ['f_with_custom_validator'])
self.assertFieldFailsValidationWithMessage(
- mtv.clean,
+ mtv.full_validate,
'f_with_custom_validator',
[u'This is not the answer to life, universe and everything!']
)
def test_custom_complex_validator_raises_error_for_incorrect_value(self):
mtv = ModelToValidate(number=42, name='Some Name', f_with_custom_validator=42)
- self.assertFailsValidation(mtv.clean, ['f_with_custom_validator'])
+ self.assertFailsValidation(mtv.full_validate, ['f_with_custom_validator'])
self.assertFieldFailsValidationWithMessage(
- mtv.clean,
+ mtv.full_validate,
'f_with_custom_validator',
[u"Must not equal to 'number''s value"]
)
-
- def test_complex_validator_isnt_run_if_field_doesnt_clean(self):
+ def test_complex_validator_isnt_run_if_field_doesnt_validate(self):
mtv = ModelToValidate(number=32, name='Some Name', f_with_custom_validator=32)
self.assertFieldFailsValidationWithMessage(
- mtv.clean,
+ mtv.full_validate,
'f_with_custom_validator',
[u'This is not the answer to life, universe and everything!']
)