| 165 | | class RelatedFieldWidgetWrapper(object): |
|---|
| 166 | | """ |
|---|
| 167 | | This class is a wrapper whose __call__() method mimics the interface of a |
|---|
| 168 | | Widget's render() method. |
|---|
| 169 | | """ |
|---|
| 170 | | def __init__(self, render_func, rel, admin_site): |
|---|
| 171 | | self.render_func, self.rel = render_func, rel |
|---|
| | 167 | class RelatedFieldWidgetWrapper(forms.Widget): |
|---|
| | 168 | """ |
|---|
| | 169 | This class is a wrapper to a given widget to add the add icon for the |
|---|
| | 170 | admin interface. |
|---|
| | 171 | """ |
|---|
| | 172 | def __init__(self, widget, rel, admin_site): |
|---|
| | 173 | self.is_hidden = widget.is_hidden |
|---|
| | 174 | self.needs_multipart_form = widget.needs_multipart_form |
|---|
| | 175 | self.attrs = widget.attrs |
|---|
| | 176 | self.choices = widget.choices |
|---|
| | 177 | self.widget = widget |
|---|
| | 178 | self.rel = rel |
|---|
| 175 | | def __call__(self, name, value, *args, **kwargs): |
|---|
| | 182 | def __deepcopy__(self, memo): |
|---|
| | 183 | obj = copy.copy(self) |
|---|
| | 184 | obj.widget = copy.deepcopy(self.widget, memo) |
|---|
| | 185 | obj.attrs = self.widget.attrs |
|---|
| | 186 | memo[id(self)] = obj |
|---|
| | 187 | return obj |
|---|
| | 188 | |
|---|
| | 189 | def render(self, name, value, *args, **kwargs): |
|---|
| 188 | | def __deepcopy__(self, memo): |
|---|
| 189 | | # There's no reason to deepcopy admin_site, etc, so just return self. |
|---|
| 190 | | memo[id(self)] = self |
|---|
| 191 | | return self |
|---|
| | 203 | def build_attrs(self, extra_attrs=None, **kwargs): |
|---|
| | 204 | "Helper function for building an attribute dictionary." |
|---|
| | 205 | self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs) |
|---|
| | 206 | return self.attrs |
|---|
| | 207 | |
|---|
| | 208 | def value_from_datadict(self, data, files, name): |
|---|
| | 209 | return self.widget.value_from_datadict(data, files, name) |
|---|
| | 210 | |
|---|
| | 211 | def _has_changed(self, initial, data): |
|---|
| | 212 | return self.widget._has_changed(initial, data) |
|---|
| | 213 | |
|---|
| | 214 | def id_for_label(self, id_): |
|---|
| | 215 | return self.widget.id_for_label(id_) |
|---|