Лукап iexact

Лукап iexact применяется к полям модели в запросах filter, exclude и других, выполняет регистронезависимое точное сравнение. В качестве аргумента принимает строку, с которой сравнивается значение поля. Поддерживается всеми текстовыми полями: CharField, TextField, EmailField и другими. При сравнении игнорируется регистр символов, что особенно полезно при поиске по пользовательскому вводу.

Синтаксис

pythonModel.objects.filter(field__iexact="value")

Пример . Модель

Для демонстрации работы лукапа определим модель статьи:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200)
  slug = models.SlugField(unique=True)
  content = models.TextField()
  category = models.CharField(max_length=100)
  created_at = models.DateTimeField(auto_now_add=True)

  def __str__(self):
    return self.title

Пример . С полем title

Найдём статью с заголовком "Django Basics", игнорируя регистр:

pythonfrom myapp.models import Article

# Поиск с точным совпадением без учёта регистра
articles = Article.objects.filter(title__iexact="django basics")
for article in articles:
  print(article.title)

Результат выполнения кода:

python"Django Basics"

Пример . С полем category

Выберем все статьи категории "Web Development" без учёта регистра:

pythonfrom myapp.models import Article

# Поиск категорий с игнорированием регистра
web_articles = Article.objects.filter(category__iexact="web development")
for article in web_articles:
  print(f"{article.title} - {article.category}")

Результат выполнения кода:

python"Building REST API - Web Development"
"Advanced Django - Web Development"

Сравнение с точным лукапом exact

В отличие от iexact, лукап exact учитывает регистр символов:

pythonfrom myapp.models import Article

# Точный поиск с учётом регистра (не найдёт)
res_exact = Article.objects.filter(title__exact="django basics")
print(res_exact)

# Регистронезависимый поиск (найдёт)
res_iexact = Article.objects.filter(title__iexact="django basics")
print(res_iexact)

Результат выполнения кода:

python"<QuerySet []>"
"[<Article: Django Basics>]"

Пример . С исключением

Исключим статьи с категорией "Draft", игнорируя регистр:

pythonfrom myapp.models import Article

# Исключаем категорию Draft в любом регистре
published = Article.objects.exclude(category__iexact="draft")
for article in published:
  print(article.title)

Результат выполнения кода:

python"Django Basics"
"Building REST API"

Смотрите также

  • лукап exact,
    который выполняет регистрозависимое точное сравнение
  • лукап contains,
    который проверяет вхождение подстроки с учётом регистра
  • лукап icontains,
    который проверяет вхождение подстроки без учёта регистра
  • лукап startswith,
    который проверяет начало строки с учётом регистра