Author: mtredinnick
Date: 2007-09-13 22:29:39 -0500 (Thu, 13 Sep 2007)
New Revision: 6156
Modified:
django/trunk/django/newforms/fields.py
django/trunk/django/newforms/forms.py
django/trunk/tests/regressiontests/forms/tests.py
Log:
Fixed #3489 -- Added proper deepcopying to form fields so that widget instances
get copied as well. Patch from Jonathan Buchanan and insin.
Modified: django/trunk/django/newforms/fields.py
===================================================================
--- django/trunk/django/newforms/fields.py 2007-09-14 03:17:46 UTC (rev
6155)
+++ django/trunk/django/newforms/fields.py 2007-09-14 03:29:39 UTC (rev
6156)
@@ -2,6 +2,7 @@
Field classes
"""
+import copy
import datetime
import re
import time
@@ -100,6 +101,12 @@
"""
return {}
+ def __deepcopy__(self, memo):
+ result = copy.copy(self)
+ memo[id(self)] = result
+ result.widget = copy.deepcopy(self.widget, memo)
+ return result
+
class CharField(Field):
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
self.max_length, self.min_length = max_length, min_length
Modified: django/trunk/django/newforms/forms.py
===================================================================
--- django/trunk/django/newforms/forms.py 2007-09-14 03:17:46 UTC (rev
6155)
+++ django/trunk/django/newforms/forms.py 2007-09-14 03:29:39 UTC (rev
6156)
@@ -31,7 +31,7 @@
dict.__init__(self, dict(data))
def copy(self):
- return SortedDictFromList([(k, copy.copy(v)) for k, v in self.items()])
+ return SortedDictFromList([(k, copy.deepcopy(v)) for k, v in
self.items()])
class DeclarativeFieldsMetaclass(type):
"""
Modified: django/trunk/tests/regressiontests/forms/tests.py
===================================================================
--- django/trunk/tests/regressiontests/forms/tests.py 2007-09-14 03:17:46 UTC
(rev 6155)
+++ django/trunk/tests/regressiontests/forms/tests.py 2007-09-14 03:29:39 UTC
(rev 6156)
@@ -2690,16 +2690,24 @@
... super(Person, self).__init__(*args, **kwargs)
... if names_required:
... self.fields['first_name'].required = True
+... self.fields['first_name'].widget.attrs['class'] = 'required'
... self.fields['last_name'].required = True
+... self.fields['last_name'].widget.attrs['class'] = 'required'
>>> f = Person(names_required=False)
>>> f['first_name'].field.required, f['last_name'].field.required
(False, False)
+>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs
+({}, {})
>>> f = Person(names_required=True)
>>> f['first_name'].field.required, f['last_name'].field.required
(True, True)
+>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs
+({'class': 'required'}, {'class': 'required'})
>>> f = Person(names_required=False)
>>> f['first_name'].field.required, f['last_name'].field.required
(False, False)
+>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs
+({}, {})
>>> class Person(Form):
... first_name = CharField(max_length=30)
... last_name = CharField(max_length=30)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---