Класс Trim

Класс Trim применяется в аннотациях и агрегациях для обрезки пробелов (или других указанных символов) в начале и конце строковых значений полей. Он является выражением базы данных и преобразуется в соответствующий SQL-запрос. Класс принимает один обязательный аргумент - выражение, которое должно быть обработано.

Синтаксис

pythonfrom django.db.models import Trim

Trim(expression)

В качестве аргумента expression может выступать название поля модели, объект класса F или другое выражение, возвращающее строковое значение.

Пример

Давайте добавим аннотацию к записям, которая обрезает пробелы в поле 'title':

pythonfrom 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)

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

python"First article"
"Second article"
"Third article"

Пример

Давайте используем класс Trim в связке с классом Concat для объединения полей с предварительной очисткой:

pythonfrom 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)

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

python"First article - News"
"Second article - Blog"
"Third article - News"

Пример

Давайте используем класс Trim для фильтрации записей, у которых обрезанное название содержит определенный текст:

pythonfrom 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)

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

python"First article"
"Second article"
"Third article"

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

  • класс Concat,
    который объединяет строковые значения
  • класс Lower,
    который преобразует строку в нижний регистр
  • класс Upper,
    который преобразует строку в верхний регистр
  • класс Length,
    который возвращает длину строки