X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/05bdd3ca32b67c218f7d58c2def2661867b4d1fa..bf7348280872f3e17f6cb766f27d57c41d9e2ae0:/admin/widgets.py
diff --git a/admin/widgets.py b/admin/widgets.py
index 7a47c63..fb13ac7 100644
--- a/admin/widgets.py
+++ b/admin/widgets.py
@@ -1,6 +1,6 @@
from django import forms
from django.conf import settings
-from django.contrib.admin.widgets import FilteredSelectMultiple
+from django.contrib.admin.widgets import FilteredSelectMultiple, url_params_from_lookup_dict
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from django.utils.text import truncate_words
@@ -10,28 +10,34 @@ from django.utils.html import escape
class ModelLookupWidget(forms.TextInput):
# is_hidden = False
- def __init__(self, content_type, attrs=None):
+ def __init__(self, content_type, attrs=None, limit_choices_to=None):
self.content_type = content_type
+ self.limit_choices_to = limit_choices_to
super(ModelLookupWidget, self).__init__(attrs)
def render(self, name, value, attrs=None):
related_url = '../../../%s/%s/' % (self.content_type.app_label, self.content_type.model)
+ params = url_params_from_lookup_dict(self.limit_choices_to)
+ if params:
+ url = u'?' + u'&'.join([u'%s=%s' % (k, v) for k, v in params.items()])
+ else:
+ url = u''
if attrs is None:
attrs = {}
- if not attrs.has_key('class'):
+ if "class" not in attrs:
attrs['class'] = 'vForeignKeyRawIdAdminField'
- output = super(ModelLookupWidget, self).render(name, value, attrs)
- output += '' % (related_url, name)
- output += '' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup'))
- output += ''
+ output = [super(ModelLookupWidget, self).render(name, value, attrs)]
+ output.append('' % (related_url, url, name))
+ output.append('' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup')))
+ output.append('')
if value:
value_class = self.content_type.model_class()
try:
value_object = value_class.objects.get(pk=value)
- output += ' %s' % escape(truncate_words(value_object, 14))
+ output.append(' %s' % escape(truncate_words(value_object, 14)))
except value_class.DoesNotExist:
pass
- return mark_safe(output)
+ return mark_safe(u''.join(output))
class TagFilteredSelectMultiple(FilteredSelectMultiple):
@@ -42,15 +48,12 @@ class TagFilteredSelectMultiple(FilteredSelectMultiple):
catalog has been loaded in the page
"""
class Media:
- js = (settings.ADMIN_MEDIA_PREFIX + "js/core.js",
- settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js",
- settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js")
-
- if 'staticmedia' in settings.INSTALLED_APPS:
- import staticmedia
- js += (staticmedia.url('admin/js/TagCreation.js'),)
- else:
- js += (settings.ADMIN_MEDIA_PREFIX + "js/TagCreation.js",)
+ js = (
+ settings.ADMIN_MEDIA_PREFIX + "js/core.js",
+ settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js",
+ settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js",
+ settings.ADMIN_MEDIA_PREFIX + "js/TagCreation.js",
+ )
def render(self, name, value, attrs=None, choices=()):
if attrs is None: attrs = {}