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