Лукап icontains
Лукап icontains применяется к полям модели при формировании запросов через filter, exclude и другие методы QuerySet. Он проверяет, содержит ли строковое поле указанную подстроку, игнорируя регистр символов. В качестве аргумента передается строка или выражение, которое будет искаться внутри значения поля. Лукап генерирует SQL-запрос с оператором LIKE, что обеспечивает эффективный поиск в текстовых данных.
Синтаксис
Model.objects.filter(field__icontains='substring')
Пример . С моделью Article
Рассмотрим модель статьи с полем заголовка и содержимого:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published = models.BooleanField(default=False)
def __str__(self):
return self.title
Давайте найдем все статьи, в заголовке которых содержится слово "django" независимо от регистра:
from myapp.models import Article
articles = Article.objects.filter(title__icontains='django')
for article in articles:
print(article.title)
Результат выполнения кода:
"Django for Beginners"
"Advanced Django Techniques"
"Using django REST Framework"
Пример . С регистронезависимостью
Лукап icontains находит подстроку вне зависимости от регистра. Поиск "PYTHON" найдет записи с "Python", "python" и другими вариантами:
from myapp.models import Article
res = Article.objects.filter(content__icontains='PYTHON')
for article in res:
print(f"{article.title}: {article.content[:50]}...")
Результат выполнения кода:
"Python Basics: Python is a powerful programming language..."
"Data Science: Using Python for data analysis..."
Пример . С комбинированным условием
Лукап icontains можно комбинировать с другими условиями для более точной фильтрации:
from myapp.models import Article
articles = Article.objects.filter(
title__icontains='web',
published=True
)
for article in articles:
print(article.title)
Результат выполнения кода:
"Web Development Guide"
"Building Web Apps with Django"
Пример . С исключением
Используем icontains вместе с exclude для поиска статей, не содержащих определенное слово:
from myapp.models import Article
articles = Article.objects.exclude(
title__icontains='draft'
)
for article in articles:
print(article.title)
Результат выполнения кода:
"Final Guide to Django"
"Python Web Development"
Пример . С методами values и values_list
Для получения только нужных полей можно использовать values или values_list вместе с icontains:
from myapp.models import Article
titles = Article.objects.filter(
content__icontains='framework'
).values_list('title', flat=True)
for title in titles:
print(title)
Результат выполнения кода:
"Django Framework Guide"
"Flask vs Django"
Смотрите также
-
лукап
contains,
который выполняет регистрозависимый поиск подстроки -
лукап
iexact,
который выполняет регистронезависимое точное сравнение строк -
лукап
istartswith,
который проверяет, начинается ли строка с указанной подстроки без учета регистра -
лукап
iendswith,
который проверяет, заканчивается ли строка на указанную подстроку без учета регистра