Класс Length

Класс Length применяется в выражениях Django ORM для получения длины содержимого текстового поля. Он преобразуется в SQL-функцию LENGTH или CHAR_LENGTH в зависимости от используемой базы данных. Класс принимает выражение или имя поля и возвращает целочисленное значение длины строки. Это полезно при фильтрации, аннотации или сортировке записей по длине текста.

Синтаксис

pythonfrom django.db.models.functions import Length

Length(expression, **extra)

Параметр expression может быть именем поля модели, строковым значением или другим выражением, возвращающим текст. Дополнительные аргументы передаются через **extra для настройки поведения функции.

Пример

Аннотируем статьи длиной их заголовков:

pythonfrom myapp.models import Article
from django.db.models.functions import Length

articles = Article.objects.annotate(
  title_length=Length('title')
).values('title', 'title_length')

for article in articles:
  print(f"Title: {article['title']}, Length: {article['title_length']}")

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

python"Title: Django Basics, Length: 13"
"Title: Advanced ORM, Length: 12"
"Title: Web Development, Length: 16"

Пример

Отфильтруем статьи, длина заголовка которых больше 10 символов:

pythonfrom myapp.models import Article
from django.db.models.functions import Length

long_title_articles = Article.objects.annotate(
  title_length=Length('title')
).filter(title_length__gt=10)

for article in long_title_articles:
  print(article.title)

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

python"Django Basics"
"Advanced ORM"
"Web Development"

Пример

Отсортируем категории по длине их названия в порядке убывания:

pythonfrom myapp.models import Category
from django.db.models.functions import Length

sorted_categories = Category.objects.annotate(
  name_length=Length('name')
).order_by('-name_length')

for category in sorted_categories:
  print(f"{category.name} ({category.name_length})")

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

python"Programming (11)"
"Design (6)"
"Music (5)"

Пример

Используем Length вместе с F выражением для обновления полей на основе длины другого поля:

pythonfrom myapp.models import Article
from django.db.models.functions import Length
from django.db.models import F

Article.objects.update(
  char_count=Length('content') + F('char_count')
)
print("Articles updated with character count")

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

python"Articles updated with character count"

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

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