
Index: forms.py
===================================================================
--- forms.py	(revision 10821)
+++ forms.py	(working copy)
@@ -88,7 +88,13 @@
         # alter self.fields, we create self.fields here by copying base_fields.
         # Instances should always modify self.fields; they should not modify
         # self.base_fields.
+        
         self.fields = deepcopy(self.base_fields)
+        for fieldName, field in self.fields.items():
+            try:
+                field.widget.choices.field = field
+            except:
+                pass
 
     def __unicode__(self):
         return self.as_table()
Index: widgets.py
===================================================================
--- widgets.py	(revision 10821)
+++ widgets.py	(working copy)
@@ -396,6 +396,13 @@
         # more than once.
         self.choices = list(choices)
 
+    def __deepcopy__(self, memo):
+        obj = copy.copy(self)
+        obj.attrs = self.attrs.copy()
+        obj.choices = copy.copy(self.choices)
+        memo[id(self)] = obj
+        return obj
+
     def render(self, name, value, attrs=None, choices=()):
         if value is None: value = ''
         final_attrs = self.build_attrs(attrs, name=name)
