Класс Trim
Класс Trim применяется в аннотациях и агрегациях
для обрезки пробелов (или других указанных символов)
в начале и конце строковых значений полей. Он является
выражением базы данных и преобразуется в соответствующий
SQL-запрос. Класс принимает один обязательный аргумент
- выражение, которое должно быть обработано.
Синтаксис
from django.db.models import Trim
Trim(expression)
В качестве аргумента expression может выступать
название поля модели, объект класса F или
другое выражение, возвращающее строковое значение.
Пример
Давайте добавим аннотацию к записям, которая обрезает
пробелы в поле 'title':
from myapp.models import Article
from django.db.models import Trim, Value
from django.db.models.functions import Concat
articles = Article.objects.annotate(
trimmed_title=Trim('title')
)
for article in articles:
print(article.trimmed_title)
Результат выполнения кода:
"First article"
"Second article"
"Third article"
Пример
Давайте используем класс Trim в связке с
классом Concat для объединения полей
с предварительной очисткой:
from myapp.models import Article
from django.db.models import Trim, F, Value
from django.db.models.functions import Concat
articles = Article.objects.annotate(
full_info=Concat(
Trim('title'),
Value(' - '),
Trim('category'),
output_field=CharField()
)
)
for article in articles:
print(article.full_info)
Результат выполнения кода:
"First article - News"
"Second article - Blog"
"Third article - News"
Пример
Давайте используем класс Trim для фильтрации
записей, у которых обрезанное название содержит
определенный текст:
from myapp.models import Article
from django.db.models import Trim, F
from django.db.models.functions import Lower
articles = Article.objects.annotate(
trimmed_title=Trim(Lower('title'))
).filter(
trimmed_title__contains='article'
)
for article in articles:
print(article.title)
Результат выполнения кода:
"First article"
"Second article"
"Third article"