Мне удалось установить unaccent из postgresql contrib, но этот ответ о том, что патчи django не сработали.load_backend на django.db.utils обеспечивает, чтобы имя бэкенда начиналось с django.db.backends.
Для меня работало решение вставить этот код в один из моих модулей:
from django.db.backends.postgresql_psycopg2.base import DatabaseOperations, DatabaseWrapper
def lookup_cast(self, lookup_type, internal_type=None):
if lookup_type in('icontains', 'istartswith'):
return "UPPER(unaccent(%s::text))"
else:
return super(DatabaseOperations, self).lookup_cast(lookup_type, internal_type)
def patch_unaccent():
DatabaseOperations.lookup_cast = lookup_cast
DatabaseWrapper.operators['icontains'] = 'LIKE UPPER(unaccent(%s))'
DatabaseWrapper.operators['istartswith'] = 'LIKE UPPER(unaccent(%s))'
print 'Unaccent patch'
patch_unaccent()
Теперь безналичные поиски работают нормально, даже внутри django admin!Спасибо за ваш ответ выше!