class PgILike(IContains):
"""
Кастомный field lookups на замену icontains в postgresql
title__icontains='zk45'
UPPER("bgbilling_contracts"."title"::text) LIKE UPPER('%zk45%')
что требует либо построения индексов на upper что не есть хорошо
title__ilike='zk45'
"bgbilling_contracts"."title" ILIKE '%zk45%'
С построенным gist индексом представляет гораздо более интересное решение
"""
lookup_name = 'ilike'
def as_postgresql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s ILIKE %s' % (lhs, rhs), params
models.CharField.register_lookup(PgILike)
models.TextField.register_lookup(PgILike)