===========================
PostgreSQL specific lookups
===========================

``Unaccent``
============

.. fieldlookup:: unaccent

The ``unaccent`` lookup allows you to perform accent-insensitive lookups using
a dedicated PostgreSQL extension.

This lookup is implemented using :class:`~django.db.models.Transform`, so it
can be chained with other lookup functions. To use it, you need to add
``'django.contrib.postgres'`` in your :setting:`INSTALLED_APPS` and activate
the `unaccent extension on PostgreSQL`_. The
:class:`~django.contrib.postgres.operations.UnaccentExtension` migration
operation is available if you want to perform this activation using migrations).

.. _unaccent extension on PostgreSQL: http://www.postgresql.org/docs/current/interactive/unaccent.html

The ``unaccent`` lookup can be used on
:class:`~django.db.models.CharField` and :class:`~django.db.models.TextField`::

    >>> City.objects.filter(name__unaccent="México")
    ['<City: Mexico>']

    >>> User.objects.filter(first_name__unaccent__startswith="Jerem")
    ['<User: Jeremy>', '<User: Jérémy>', '<User: Jérémie>', '<User: Jeremie>']

.. warning::

    ``unaccent`` lookups should perform fine in most use cases. However, queries
    using this filter will generally perform full table scans, which can be slow
    on large tables. In those cases, using dedicated full text indexing tools
    might be appropriate.
