Usando PostgreSQL unaccent no Django 1.7

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