Loading django/db/models/base.py +2 −0 Original line number Diff line number Diff line Loading @@ -987,6 +987,8 @@ class Model(six.with_metaclass(ModelBase)): errors = {} if exclude is None: exclude = [] else: exclude = list(exclude) try: self.clean_fields(exclude=exclude) Loading tests/validation/__init__.py +2 −2 Original line number Diff line number Diff line Loading @@ -3,9 +3,9 @@ from django.test import TestCase class ValidationTestCase(TestCase): def assertFailsValidation(self, clean, failed_fields): def assertFailsValidation(self, clean, failed_fields, **kwargs): with self.assertRaises(ValidationError) as cm: clean() clean(**kwargs) self.assertEqual(sorted(failed_fields), sorted(cm.exception.message_dict)) def assertFieldFailsValidationWithMessage(self, clean, field_name, message): Loading tests/validation/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ class BaseModelValidationTests(ValidationTestCase): mtv = ModelToValidate(number=10, name='Some Name', slug='##invalid##') self.assertFailsValidation(mtv.full_clean, ['slug']) def test_full_clean_does_not_mutate_exclude(self): mtv = ModelToValidate(f_with_custom_validator=42) exclude = ['number'] self.assertFailsValidation(mtv.full_clean, ['name'], exclude=exclude) self.assertEqual(len(exclude), 1) self.assertEqual(exclude[0], 'number') class ArticleForm(forms.ModelForm): class Meta: Loading Loading
django/db/models/base.py +2 −0 Original line number Diff line number Diff line Loading @@ -987,6 +987,8 @@ class Model(six.with_metaclass(ModelBase)): errors = {} if exclude is None: exclude = [] else: exclude = list(exclude) try: self.clean_fields(exclude=exclude) Loading
tests/validation/__init__.py +2 −2 Original line number Diff line number Diff line Loading @@ -3,9 +3,9 @@ from django.test import TestCase class ValidationTestCase(TestCase): def assertFailsValidation(self, clean, failed_fields): def assertFailsValidation(self, clean, failed_fields, **kwargs): with self.assertRaises(ValidationError) as cm: clean() clean(**kwargs) self.assertEqual(sorted(failed_fields), sorted(cm.exception.message_dict)) def assertFieldFailsValidationWithMessage(self, clean, field_name, message): Loading
tests/validation/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ class BaseModelValidationTests(ValidationTestCase): mtv = ModelToValidate(number=10, name='Some Name', slug='##invalid##') self.assertFailsValidation(mtv.full_clean, ['slug']) def test_full_clean_does_not_mutate_exclude(self): mtv = ModelToValidate(f_with_custom_validator=42) exclude = ['number'] self.assertFailsValidation(mtv.full_clean, ['name'], exclude=exclude) self.assertEqual(len(exclude), 1) self.assertEqual(exclude[0], 'number') class ArticleForm(forms.ModelForm): class Meta: Loading