Лукап icontains

Лукап icontains применяется к полям модели при формировании запросов через filter, exclude и другие методы QuerySet. Он проверяет, содержит ли строковое поле указанную подстроку, игнорируя регистр символов. В качестве аргумента передается строка или выражение, которое будет искаться внутри значения поля. Лукап генерирует SQL-запрос с оператором LIKE, что обеспечивает эффективный поиск в текстовых данных.

Синтаксис

pythonModel.objects.filter(field__icontains='substring')

Пример . С моделью Article

Рассмотрим модель статьи с полем заголовка и содержимого:

pythonfrom 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" независимо от регистра:

pythonfrom myapp.models import Article

articles = Article.objects.filter(title__icontains='django')
for article in articles:
  print(article.title)

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

python"Django for Beginners"
"Advanced Django Techniques"
"Using django REST Framework"

Пример . С регистронезависимостью

Лукап icontains находит подстроку вне зависимости от регистра. Поиск "PYTHON" найдет записи с "Python", "python" и другими вариантами:

pythonfrom myapp.models import Article

res = Article.objects.filter(content__icontains='PYTHON')
for article in res:
  print(f"{article.title}: {article.content[:50]}...")

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

python"Python Basics: Python is a powerful programming language..."
"Data Science: Using Python for data analysis..."

Пример . С комбинированным условием

Лукап icontains можно комбинировать с другими условиями для более точной фильтрации:

pythonfrom myapp.models import Article

articles = Article.objects.filter(
  title__icontains='web',
  published=True
)
for article in articles:
  print(article.title)

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

python"Web Development Guide"
"Building Web Apps with Django"

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

Используем icontains вместе с exclude для поиска статей, не содержащих определенное слово:

pythonfrom myapp.models import Article

articles = Article.objects.exclude(
  title__icontains='draft'
)
for article in articles:
  print(article.title)

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

python"Final Guide to Django"
"Python Web Development"

Пример . С методами values и values_list

Для получения только нужных полей можно использовать values или values_list вместе с icontains:

pythonfrom myapp.models import Article

titles = Article.objects.filter(
  content__icontains='framework'
).values_list('title', flat=True)
for title in titles:
  print(title)

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

python"Django Framework Guide"
"Flask vs Django"

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

  • лукап contains,
    который выполняет регистрозависимый поиск подстроки
  • лукап iexact,
    который выполняет регистронезависимое точное сравнение строк
  • лукап istartswith,
    который проверяет, начинается ли строка с указанной подстроки без учета регистра
  • лукап iendswith,
    который проверяет, заканчивается ли строка на указанную подстроку без учета регистра