Added a __deepcopy__() method to the Widget class in order to avoid a number of easy-to-trigger problems when copying Widget subclasses. Subclasses which are intended to have extra mutable fields should override this method. Refs #5505.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@6450 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-10-04 01:12:00 +00:00
parent 4d8b51f60c
commit b1cc3318c7
1 changed files with 8 additions and 0 deletions

View File

@ -7,7 +7,9 @@ try:
except NameError: except NameError:
from sets import Set as set # Python 2.3 fallback from sets import Set as set # Python 2.3 fallback
import copy
from itertools import chain from itertools import chain
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
from django.utils.html import escape from django.utils.html import escape
from django.utils.translation import ugettext from django.utils.translation import ugettext
@ -32,6 +34,12 @@ class Widget(object):
else: else:
self.attrs = {} self.attrs = {}
def __deepcopy__(self, memo):
obj = copy.copy(self)
obj.attrs = self.attrs.copy()
memo[id(self)] = obj
return obj
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
""" """
Returns this Widget rendered as HTML, as a Unicode string. Returns this Widget rendered as HTML, as a Unicode string.