Как отфильтровать без учёта регистра?

В Django для фильтрации без учета регистра можно использовать функцию iexact() или icontains() в комбинации с методом filter() или exclude().

Функция iexact() выполняет поиск в точном соответствии без учета регистра, что означает, что она найдет все записи, которые идентичны введенному значению без учета регистра. Например, если вы ищете "apple", то функция iexact() найдет записи "apple", "Apple", "APpLE" и т. д.

Пример использования:

from django.db.models import Q
from myapp.models import MyModel

result = MyModel.objects.filter(name__iexact='apple')

В этом примере мы фильтруем модель MyModel по полю name и ищем значение "apple" без учета регистра.

Функция icontains() выполняет поиск вхождения без учета регистра, что означает, что она найдет все записи, в которых содержится введенное значение без учета регистра. Например, если вы ищете "app", то функция icontains() найдет записи "Apple", "APPLE", "apPle" и т. д.

Пример использования:

from django.db.models import Q
from myapp.models import MyModel

result = MyModel.objects.filter(name__icontains='app')

В этом примере мы фильтруем модель MyModel по полю name и ищем значения, которые содержат "app" без учета регистра.

Если вам необходимо выполнить фильтрацию сразу по нескольким полям, вы можете использовать оператор Q() и объединить несколько условий с помощью оператора | (или) или оператора & (и), в зависимости от ваших требований.

Пример использования нескольких полей в фильтрации:

from django.db.models import Q
from myapp.models import MyModel

result = MyModel.objects.filter(Q(name__iexact='apple') | Q(description__icontains='app'))

В этом примере мы фильтруем модель MyModel по полю name с точным совпадением "apple" без учета регистра или по полю description, которое содержит подстроку "app" без учета регистра.