You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

71 lines
2.4 KiB

# -*- 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)