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

Класс Least

Класс Least применяется в выражениях Django для получения минимального значения из списка переданных аргументов. Он полезен при аннотациях, фильтрации и агрегациях, когда требуется выбрать наименьшее значение среди нескольких полей или выражений. Класс принимает произвольное количество аргументов, каждый из которых может быть полем модели, числовым значением или выражением.

Синтаксис

from django.db.models import Least Least(expression1, expression2, ..., **extra)

Пример

Рассмотрим модель Product с несколькими ценовыми полями. Найдем наименьшую цену для каждого товара:

from django.db import models from django.db.models import Least, F class Product(models.Model): name = models.CharField(max_length=100) price_1 = models.DecimalField(max_digits=10, decimal_places=2) price_2 = models.DecimalField(max_digits=10, decimal_places=2) price_3 = models.DecimalField(max_digits=10, decimal_places=2) # Find the lowest price for each product products = Product.objects.annotate( lowest_price=Least('price_1', 'price_2', 'price_3') ) for product in products: print(f"{product.name}: {product.lowest_price}")

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

"Laptop: 999.99" "Phone: 499.99" "Tablet: 299.99"

Пример

Используем Least вместе с F выражениями и фильтрацией для поиска товаров, у которых минимальная цена ниже определенного значения:

from django.db.models import F, Least, Q # Find products where the lowest price is less than 500 products = Product.objects.annotate( lowest=Least(F('price_1'), F('price_2'), F('price_3')) ).filter(lowest__lt=500) for product in products: print(f"{product.name}: {product.lowest}")

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

"Phone: 499.99" "Tablet: 299.99"

Пример

Можно использовать Least с константными значениями и в комбинации с другими агрегатными функциями:

from django.db.models import Min, Least, Value # Use Least with constants and aggregate functions products = Product.objects.annotate( min_price=Min('price_1'), threshold=Least('min_price', Value(1000)) ) for product in products: print(f"{product.name}: min price = {product.min_price}, threshold = {product.threshold}")

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

"Laptop: min price = 999.99, threshold = 999.99" "Phone: min price = 499.99, threshold = 499.99"

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

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