Лукап iexact
Лукап iexact применяется к полям модели в запросах
filter, exclude и других, выполняет
регистронезависимое точное сравнение. В качестве аргумента
принимает строку, с которой сравнивается значение поля.
Поддерживается всеми текстовыми полями: CharField,
TextField, EmailField и другими.
При сравнении игнорируется регистр символов, что особенно
полезно при поиске по пользовательскому вводу.
Синтаксис
Model.objects.filter(field__iexact="value")
Пример . Модель
Для демонстрации работы лукапа определим модель статьи:
from 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", игнорируя регистр:
from myapp.models import Article
# Поиск с точным совпадением без учёта регистра
articles = Article.objects.filter(title__iexact="django basics")
for article in articles:
print(article.title)
Результат выполнения кода:
"Django Basics"
Пример . С полем category
Выберем все статьи категории "Web Development" без учёта регистра:
from myapp.models import Article
# Поиск категорий с игнорированием регистра
web_articles = Article.objects.filter(category__iexact="web development")
for article in web_articles:
print(f"{article.title} - {article.category}")
Результат выполнения кода:
"Building REST API - Web Development"
"Advanced Django - Web Development"
Сравнение с точным лукапом exact
В отличие от iexact, лукап exact
учитывает регистр символов:
from 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)
Результат выполнения кода:
"<QuerySet []>"
"[<Article: Django Basics>]"
Пример . С исключением
Исключим статьи с категорией "Draft", игнорируя регистр:
from myapp.models import Article
# Исключаем категорию Draft в любом регистре
published = Article.objects.exclude(category__iexact="draft")
for article in published:
print(article.title)
Результат выполнения кода:
"Django Basics"
"Building REST API"
Смотрите также
-
лукап
exact,
который выполняет регистрозависимое точное сравнение -
лукап
contains,
который проверяет вхождение подстроки с учётом регистра -
лукап
icontains,
который проверяет вхождение подстроки без учёта регистра -
лукап
startswith,
который проверяет начало строки с учётом регистра