| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | from django.contrib.admin import RelatedFieldListFilterfrom django.utils.encoding import smart_textfrom django.utils.html import format_htmlfrom django.core.urlresolvers import reversetry:    from django.contrib.admin.utils import get_model_from_relationexcept ImportError: # Django 1.6    from django.contrib.admin.util import get_model_from_relationtry:    from django.forms.utils import flatattexcept ImportError: # Django 1.6    from django.forms.util import flatattclass RelatedFieldAjaxListFilter(RelatedFieldListFilter):    ajax_attrs = None    def has_output(self):        return True    def field_choices(self, field, request, model_admin):        model = field.remote_field.model if hasattr(field, 'remote_field') else field.related_field.model        app_label = model._meta.app_label        model_name = model._meta.object_name        self.ajax_attrs = format_html('{0}', flatatt({            'data-app-label': app_label,            'data-model': model_name,            'data-ajax--url': reverse('jet:model_lookup'),            'data-queryset--lookup': self.lookup_kwarg        }))        if self.lookup_val is None:            return []        other_model = get_model_from_relation(field)        if hasattr(field, 'rel'):            rel_name = field.rel.get_related_field().name        else:            rel_name = other_model._meta.pk.name        queryset = model._default_manager.filter(**{rel_name: self.lookup_val}).all()        return [(x._get_pk_val(), smart_text(x)) for x in queryset]
 |