РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
148 of 818 menu

Класс Cast

Класс Cast применяется в выражениях Django ORM для приведения значений к определенному типу данных. Это может быть полезно, когда нужно изменить тип поля в запросе, чтобы корректно выполнить сравнения или использовать в вычислениях. Класс принимает два аргумента: выражение, которое требуется преобразовать, и целевой тип поля из модуля django.db.models.fields.

Синтаксис

from django.db.models import Cast from django.db.models.fields import IntegerField, CharField, DateField Cast(expression, output_field)

Пример

Допустим, у нас есть модель статьи с полем 'views' типа CharField, но нам нужно выполнить над ним числовые операции. Преобразуем строку в целое число:

from myapp.models import Article from django.db.models import Cast, F from django.db.models.fields import IntegerField # Преобразуем строковое поле views в целое число articles = Article.objects.annotate( views_int=Cast('views', IntegerField()) ).filter(views_int__gt=1000) for article in articles: print(article.title, article.views_int)

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

"Popul ar article" 1500 "Trending post" 2300

Пример

Преобразуем числовое поле в строку для конкатенации с другим строковым значением. В модели есть поле 'rating' типа IntegerField, и мы хотим добавить префикс к рейтингу:

from myapp.models import Article from django.db.models import Cast, Value from django.db.models import CharField from django.db.models.functions import Concat # Преобразуем рейтинг в строку и объединяем с префиксом articles = Article.objects.annotate( rating_str=Cast('rating', CharField()) ).annotate( full_rating=Concat(Value('Rating: '), 'rating_str') ) for article in articles: print(article.title, article.full_rating)

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

"Article 1" "Rating: 4" "Article 2" "Rating: 5"

Пример

Преобразуем строковое поле с датой в тип DateField, чтобы выполнить фильтрацию по дате. В модели поле 'published_at_str' хранит дату в виде строки:

from myapp.models import Article from django.db.models import Cast, Q from django.db.models.fields import DateField from datetime import date # Преобразуем строку в дату и фильтруем articles = Article.objects.annotate( pub_date=Cast('published_at_str', DateField()) ).filter(pub_date__gte=date(2025, 1, 1)) for article in articles: print(article.title, article.pub_date)

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

"New Year article" 2025-01-01 "January news" 2025-01-15

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

  • класс Value,
    который позволяет создавать константные значения в выражениях
  • класс Concat,
    который объединяет строковые значения в одно поле
  • класс Coalesce,
    который возвращает первое непустое значение из списка
  • класс ExpressionWrapper,
    который оборачивает выражение с указанием типа выходного поля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить