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.
47 lines
1.5 KiB
47 lines
1.5 KiB
# -*- coding: utf-8 -*-
|
|
from functools import update_wrapper, partial
|
|
|
|
from django.contrib import admin
|
|
from django.conf.urls import patterns, url
|
|
|
|
from modeltranslation.admin import TabbedTranslationAdmin
|
|
|
|
from functions.admin import DefaultAdmin
|
|
from functions.http import JsonResponse
|
|
|
|
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) |