Класс Min
Класс Min применяется в агрегациях и аннотациях QuerySet для нахождения минимального значения поля модели. Он принимает имя поля в качестве аргумента и возвращает наименьшее значение среди всех записей выборки. Класс можно использовать как самостоятельную агрегацию через метод aggregate или в комбинации с annotate для группировок. Поддерживает работу с числами, датами, временем и текстовыми полями.
Синтаксис
from django.db.models import Min
# Агрегация по всей таблице
Model.objects.aggregate(Min('field_name'))
# Аннотация для каждой группы записей
Model.objects.values('group_field').annotate(Min('field_name'))
Пример
Найдем минимальную цену среди всех товаров в базе данных:
from myapp.models import Product
from django.db.models import Min
res = Product.objects.aggregate(Min('price'))
print(res)
Результат выполнения кода:
{"price__min": 9.99}
Пример
Вычислим минимальную дату создания заказов для каждого статуса:
from myapp.models import Order
from django.db.models import Min
res = Order.objects.values('status').annotate(Min('created_at'))
for item in res:
print(f"{item['status']}: {item['created_at__min']}")
Результат выполнения кода:
"new: 2025-01-10 10:30:00"
"processing: 2025-02-15 14:20:00"
"shipped: 2025-03-01 09:00:00"
Пример
Получим минимальное значение с помощью комбинации с фильтром:
from myapp.models import Product
from django.db.models import Min
res = Product.objects.filter(category='electronics').aggregate(Min('price'))
print(res)
Результат выполнения кода:
{"price__min": 149.99}