1
# Modified copy of django.contrib.admin.widgets.RelatedFieldWidgetWrapper
2
# Removed reverences to admin_site, and instead accept a popup_url
4
from django import forms
5
from django.conf import settings
6
from django.utils.translation import ugettext as _
7
from django.utils.safestring import mark_safe
10
class PopupRelatedFieldWidgetWrapper(forms.Widget):
12
This class is a wrapper to a given widget to add the add icon for the
15
def __init__(self, widget, popup_url):
16
self.is_hidden = widget.is_hidden
17
self.needs_multipart_form = widget.needs_multipart_form
18
self.attrs = widget.attrs
19
self.choices = widget.choices
21
self.popup_url = popup_url
23
def __deepcopy__(self, memo):
25
obj.widget = copy.deepcopy(self.widget, memo)
26
obj.attrs = self.widget.attrs
31
wm = self.widget.media
32
wm.add_js(['%sjs/admin/RelatedObjectLookups.js'%settings.ADMIN_MEDIA_PREFIX,])
34
media = property(_media)
36
def render(self, name, value, *args, **kwargs):
38
self.widget.choices = self.choices
39
output = [self.widget.render(name, value, *args, **kwargs)]
40
output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
41
(self.popup_url, name))
42
output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.ADMIN_MEDIA_PREFIX, _('Add Another')))
43
return mark_safe(u''.join(output))
45
def build_attrs(self, extra_attrs=None, **kwargs):
46
"Helper function for building an attribute dictionary."
47
self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs)
50
def value_from_datadict(self, data, files, name):
51
return self.widget.value_from_datadict(data, files, name)
53
def _has_changed(self, initial, data):
54
return self.widget._has_changed(initial, data)
56
def id_for_label(self, id_):
57
return self.widget.id_for_label(id_)