Класс Upper
Класс Upper применяется в аннотациях и агрегациях QuerySet
для преобразования строкового значения поля в верхний регистр.
Этот класс наследуется от Func и генерирует SQL-выражение
UPPER, которое выполняется на стороне базы данных.
Класс принимает одно или несколько выражений в качестве аргументов
и возвращает преобразованную строку в верхнем регистре.
Синтаксис
from django.db.models.functions import Upper
Upper(expression, **extra)
Пример . С преобразованием поля
Допустим, у нас есть модель статьи с полем title,
и мы хотим преобразовать все заголовки в верхний регистр:
from django.db.models.functions import Upper
from myapp.models import Article
articles = Article.objects.annotate(
title_upper=Upper('title')
).values('title', 'title_upper')
for article in articles:
print(article['title_upper'])
Результат выполнения кода:
"ПЕРВАЯ СТАТЬЯ"
"ВТОРАЯ СТАТЬЯ"
"ТРЕТЬЯ СТАТЬЯ"
Пример . С преобразованием в условиях фильтрации
Преобразуем строку в верхний регистр и используем её в условии фильтрации:
from django.db.models.functions import Upper
from myapp.models import Article
articles = Article.objects.annotate(
upper_title=Upper('title')
).filter(upper_title='НОВОСТИ')
for article in articles:
print(article.title)
Результат выполнения кода:
"Новости"
Пример . С преобразованием нескольких полей
Преобразуем в верхний регистр сразу два поля - заголовок и описание:
from django.db.models.functions import Upper
from myapp.models import Article
articles = Article.objects.annotate(
title_upper=Upper('title'),
description_upper=Upper('description')
).values('title_upper', 'description_upper')
for article in articles:
print(f"{article['title_upper']}: {article['description_upper']}")
Результат выполнения кода:
"ПЕРВАЯ СТАТЬЯ: ЭТО ОПИСАНИЕ ПЕРВОЙ СТАТЬИ"
"ВТОРАЯ СТАТЬЯ: ОПИСАНИЕ ВТОРОЙ СТАТЬИ"