Solução retirada desta correção [1] para este problema [2].
Parece que isso terá suporte no Django 1.8.
Adicione este código ao seu models.py:
from django.db.models import Transform
class Unaccent(Transform):
bilateral = True
lookup_name = 'unaccent'
def as_postgresql(self, compiler, connection):
lhs, params = compiler.compile(self.lhs)
return "UNACCENT(%s)" % lhs, params
models.CharField.register_lookup(Unaccent)
models.TextField.register_lookup(Unaccent)
E crie a extensão unaccent em seu banco de dados:
CREATE EXTENSION unaccent;
Em seguida, você pode usá-lo em seus filtros, como este:
users = User.objects.filter(
first_name__unaccent__icontains='João'
)
[1] https://github.com/django/django/commit/17fe0bd808a47f37dd1351adb01a8ad2cc852f24
[2] https://code.djangoproject.com/ticket/23423