mirror of https://github.com/interlegis/sigi.git
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.
31 lines
1.1 KiB
31 lines
1.1 KiB
# -*- coding: utf-8 -*-
|
|
from django.contrib import admin
|
|
from django.db import models
|
|
from unicodedata import normalize
|
|
|
|
class SearchField(models.TextField):
|
|
def pre_save(self, model_instance, add):
|
|
search_text = []
|
|
for field_name in self.field_names:
|
|
val = unicode(to_ascii(getattr(model_instance, field_name)))
|
|
search_text.append(val)
|
|
value = u' '.join(search_text)
|
|
setattr(model_instance, self.name, value)
|
|
return value
|
|
def __init__(self, field_names, *args, **kwargs):
|
|
self.field_names = field_names
|
|
kwargs['editable'] = False
|
|
super(self.__class__, self).__init__(*args, **kwargs)
|
|
|
|
def to_ascii(txt, codif='utf-8'):
|
|
if not isinstance(txt, basestring):
|
|
txt = unicode(txt)
|
|
if isinstance(txt, unicode):
|
|
txt = txt.encode('utf-8')
|
|
return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
|
|
|
|
def queryset_ascii(self, request):
|
|
if 'q' in request.GET:
|
|
request.GET._mutable = True
|
|
request.GET['q'] = to_ascii(request.GET['q'])
|
|
return admin.ModelAdmin.queryset(self, request)
|
|
|