Django

Code

Changeset 6156

Show
Ignore:
Timestamp:
09/13/07 22:29:39 (1 year ago)
Author:
mtredinnick
Message:

Fixed #3489 -- Added proper deepcopying to form fields so that widget instances get copied as well. Patch from Jonathan Buchanan and insin.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/newforms/fields.py

    r6152 r6156  
    33""" 
    44 
     5import copy 
    56import datetime 
    67import re 
     
    100101        """ 
    101102        return {} 
     103 
     104    def __deepcopy__(self, memo): 
     105        result = copy.copy(self) 
     106        memo[id(self)] = result 
     107        result.widget = copy.deepcopy(self.widget, memo) 
     108        return result 
    102109 
    103110class CharField(Field): 
  • django/trunk/django/newforms/forms.py

    r6142 r6156  
    3232 
    3333    def copy(self): 
    34         return SortedDictFromList([(k, copy.copy(v)) for k, v in self.items()]) 
     34        return SortedDictFromList([(k, copy.deepcopy(v)) for k, v in self.items()]) 
    3535 
    3636class DeclarativeFieldsMetaclass(type): 
  • django/trunk/tests/regressiontests/forms/tests.py

    r6152 r6156  
    26912691...         if names_required: 
    26922692...             self.fields['first_name'].required = True 
     2693...             self.fields['first_name'].widget.attrs['class'] = 'required' 
    26932694...             self.fields['last_name'].required = True 
     2695...             self.fields['last_name'].widget.attrs['class'] = 'required' 
    26942696>>> f = Person(names_required=False) 
    26952697>>> f['first_name'].field.required, f['last_name'].field.required 
    26962698(False, False) 
     2699>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs 
     2700({}, {}) 
    26972701>>> f = Person(names_required=True) 
    26982702>>> f['first_name'].field.required, f['last_name'].field.required 
    26992703(True, True) 
     2704>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs 
     2705({'class': 'required'}, {'class': 'required'}) 
    27002706>>> f = Person(names_required=False) 
    27012707>>> f['first_name'].field.required, f['last_name'].field.required 
    27022708(False, False) 
     2709>>> f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs 
     2710({}, {}) 
    27032711>>> class Person(Form): 
    27042712...     first_name = CharField(max_length=30)