Fixed #17127 -- Made field validators list independent per form instance. Thanks claudep for report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17046 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Carl Meyer 2011-10-28 14:38:41 +00:00
parent b87114962f
commit 7a718f0f3a
2 changed files with 14 additions and 0 deletions

View File

@ -178,6 +178,7 @@ class Field(object):
result = copy.copy(self) result = copy.copy(self)
memo[id(self)] = result memo[id(self)] = result
result.widget = copy.deepcopy(self.widget, memo) result.widget = copy.deepcopy(self.widget, memo)
result.validators = self.validators[:]
return result return result
class CharField(Field): class CharField(Field):

View File

@ -789,6 +789,19 @@ class FormsTestCase(TestCase):
f = Person() f = Person()
self.assertEqual(f['gender'].field.choices, [('f', 'Female'), ('m', 'Male')]) self.assertEqual(f['gender'].field.choices, [('f', 'Female'), ('m', 'Male')])
def test_validators_independence(self):
""" Test that we are able to modify a form field validators list without polluting
other forms """
from django.core.validators import MaxValueValidator
class MyForm(Form):
myfield = CharField(max_length=25)
f1 = MyForm()
f2 = MyForm()
f1.fields['myfield'].validators[0] = MaxValueValidator(12)
self.assertFalse(f1.fields['myfield'].validators[0] == f2.fields['myfield'].validators[0])
def test_hidden_widget(self): def test_hidden_widget(self):
# HiddenInput widgets are displayed differently in the as_table(), as_ul()) # HiddenInput widgets are displayed differently in the as_table(), as_ul())
# and as_p() output of a Form -- their verbose names are not displayed, and a # and as_p() output of a Form -- their verbose names are not displayed, and a