Kaydet (Commit) d56267ba authored tarafından Yehonatan Daniv's avatar Yehonatan Daniv Kaydeden (comit) Tim Graham

[1.7.x] Fixed #22539 -- Copied exclude argument in Model.full_clean() to prevent side effects.

Backport of e2e4cdba from master
üst e5941ba5
......@@ -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)
......
......@@ -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):
......
......@@ -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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment