Лукап startswith

Лукап startswith применяется в методах фильтрации QuerySet, таких как filter и exclude. Он проверяет, начинается ли значение строкового поля с указанной подстроки. Поиск выполняется с учетом регистра, то есть "Article" и "article" считаются разными строками.

Синтаксис

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

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

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

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200)
  content = models.TextField()
  created_at = models.DateTimeField(auto_now_add=True)
  
  def __str__(self):
    return self.title

Допустим, в базе данных есть статьи с заголовками:

python"Python для начинающих"
"Python и Django"
"Django ORM"
"Flask vs Django"

Найдем все статьи, заголовки которых начинаются со слова "Python":

pythonfrom myapp.models import Article

articles = Article.objects.filter(title__startswith='Python')
for article in articles:
  print(article.title)

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

python"Python для начинающих"
"Python и Django"

Пример . С полным путем

Найдем статьи, в которых содержание начинается с определенного текста:

pythonfrom myapp.models import Article

articles = Article.objects.filter(content__startswith='Введение')
for article in articles:
  print(article.title)

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

Можно комбинировать startswith с другими условиями:

pythonfrom myapp.models import Article
from datetime import date

articles = Article.objects.filter(
  title__startswith='Python',
  created_at__date__gte=date(2025, 1, 1)
)
for article in articles:
  print(f"{article.title} - {article.created_at}")

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

python"Python для начинающих - 2025-01-15 10:30:00"
"Python и Django - 2025-02-20 14:20:00"

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

Исключим статьи, заголовки которых начинаются с "Python":

pythonfrom myapp.models import Article

articles = Article.objects.exclude(title__startswith='Python')
for article in articles:
  print(article.title)

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

python"Django ORM"
"Flask vs Django"

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

  • лукап istartswith,
    который выполняет поиск без учета регистра
  • лукап endswith,
    который ищет строки, заканчивающиеся на подстроку
  • лукап icontains,
    который ищет строки, содержащие подстроку без учета регистра
  • лукап exact,
    который выполняет точное сравнение строк