Search code examples
djangodjango-modelsdjango-querysetdjango-orm

Making Django model Query case-insensitive


I would like to look up users by their email without worrying about uppercase letters.

How would I do this? I tried

customer = Customer.objects.get(email__lower="[email protected]")

and got this error.

django.core.exceptions.FieldError: Unsupported lookup 'lower' for EmailField or join on the field not permitted.

Solution

  • You can work with the __iexact lookup [Django-doc]:

    customer = Customer.objects.get(email__iexact='[email protected]')

    Contrary to popular belief, calling lowercase over two items does not check if the two match in a case insensitive way. Some characters have no lowercase/uppercase variant, for example ß [wiki]. In order to determine if two strings match case-insensitive, one should apply a case folding [wiki].