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
-~----------~----~----~----~------~----~------~--~---

Reply via email to