Лукап iendswith
Лукап iendswith применяется к текстовым полям модели и позволяет выполнять регистронезависимую проверку окончания строки. Он возвращает записи, у которых значение поля заканчивается на переданную подстроку без учета регистра символов. Лукап используется в методах фильтрации filter, exclude и других, где требуется сравнение строк.
Синтаксис
Model.objects.filter(field__iendswith=value)
В качестве параметра передается подстрока, наличие которой в конце значения поля проверяется. Поиск выполняется без учета регистра.
Пример . С моделью Article
Рассмотрим модель статьи с полями для заголовка и содержимого:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
Добавим несколько записей в базу данных:
Article.objects.create(title="Django Tutorial", content="Django basics")
Article.objects.create(title="django Best Practices", content="Advanced Django")
Article.objects.create(title="Python Django Guide", content="Django and Python")
Article.objects.create(title="Web Development", content="Web with Django")
Выполним запрос для поиска статей, заголовки которых заканчиваются на "torial" без учета регистра:
articles = Article.objects.filter(title__iendswith="torial")
for article in articles:
print(article.title)
Результат выполнения кода:
"Django Tutorial"
Пример . С моделью User
Рассмотрим модель пользователя с различными текстовыми полями:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=50)
email = models.EmailField()
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.username
Заполним таблицу несколькими пользователями:
User.objects.create(username="john_doe", email="JOHN@example.com", first_name="John", last_name="Doe")
User.objects.create(username="jane_doe", email="JANE@example.org", first_name="Jane", last_name="Doe")
User.objects.create(username="admin", email="ADMIN@site.com", first_name="Admin", last_name="User")
User.objects.create(username="guest", email="GUEST@test.net", first_name="Guest", last_name="Visitor")
Найдем пользователей, чьи email адреса заканчиваются на ".org" без учета регистра:
users = User.objects.filter(email__iendswith=".org")
for user in users:
print(f"{user.username}: {user.email}")
Результат выполнения кода:
"jane_doe: JANE@example.org"
Пример . С комбинированными условиями
Лукап iendswith можно комбинировать с другими условиями фильтрации:
from django.db.models import Q
users = User.objects.filter(
Q(last_name__iendswith="e") &
Q(first_name__startswith="J")
)
for user in users:
print(f"{user.first_name} {user.last_name}")
Результат выполнения кода:
"John Doe"
"Jane Doe"
Пример . С исключением записей
Используем лукап iendswith с методом exclude для исключения записей:
users = User.objects.exclude(email__iendswith=".com")
for user in users:
print(f"{user.username}: {user.email}")
Результат выполнения кода:
"jane_doe: JANE@example.org"
"guest: GUEST@test.net"
Смотрите также
-
лукап
endswith,
который выполняет регистрозависимую проверку окончания строки -
лукап
istartswith,
который проверяет начало строки без учета регистра -
лукап
icontains,
который проверяет наличие подстроки без учета регистра -
лукап
exact,
который выполняет точное сравнение строк