X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/d8ba4e197c35a8e30f10112fcf53740e0711dc98..66d42c282c25daff0aa34ae374a05439ce2868c6:/admin/widgets.py
diff --git a/admin/widgets.py b/admin/widgets.py
index 7a47c63..aa0aa30 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):