# -*- coding: utf-8 -*- from functools import update_wrapper, partial from django.contrib import admin from django.conf.urls import patterns, url from django.utils import translation from haystack.query import SearchQuerySet from modeltranslation.admin import TabbedTranslationAdmin from functions.admin import DefaultAdmin from functions.http import JsonResponse from exposition.admin import get_by_lang from exposition.models import Exposition from conference.models import Conference from .models import TargetAudience class TargetAudienceAdmin(DefaultAdmin, TabbedTranslationAdmin): list_display = ['title'] def urls(self): urlpatterns = self.get_urls() def wrap(view): def wrapper(*args, **kwargs): return self.admin_site.admin_view(view)(*args, **kwargs) return update_wrapper(wrapper, view) info = self.model._meta.app_label, self.model._meta.module_name _urlpatterns = patterns('', url(r'^search_ajax/$', wrap(self.search_ajax_view), name='%s_%s_searchajax' % info), ) return _urlpatterns + urlpatterns urls = property(urls) def search_ajax_view(self, request, extra_context=None, *args, **kwargs): model = self.model opts = model._meta term = request.GET.get('term', '') if not term: qs = model.objects.all()[:100] else: qs = model.objects.filter(title__icontains=term) result = [{'id': obj.id, 'label': obj.title} for obj in qs] return JsonResponse(result, safe=False) admin.site.register(TargetAudience, TargetAudienceAdmin) def ajax_search(request): # perpage = 30 pk_prefixes = {'conference': 'c', 'exposition': 'e'} term = request.GET.get('term') # page = request.GET.get('page') lang = translation.get_language() if not term: qs = SearchQuerySet().models(Conference, Exposition).order_by('text') else: qs = SearchQuerySet().models(Conference, Exposition).autocomplete(content_auto=term.capitalize()).order_by('text') result = [] for item in qs[:30]: label = get_by_lang(item, 'name', lang) if label: result.append({'id': pk_prefixes.get(item.model_name) + item.pk, 'label': label}) return JsonResponse(result, safe=False)