Класс Max
Класс Max применяется в агрегирующих запросах для получения максимального значения поля из всех записей в QuerySet. Он может использоваться как самостоятельно, так и в комбинации с другими агрегирующими функциями. Аргументы передаются в виде именованных параметров, где ключ - это имя поля, а значение - условия вычисления.
Синтаксис
from django.db.models import Max
# Простое использование
Model.objects.aggregate(Max('field'))
# С переименованием результата
Model.objects.aggregate(alias=Max('field'))
Пример
Рассмотрим модель Product с полями name и price. Получим максимальную цену среди всех товаров:
from django.db.models import Max
from myapp.models import Product
max_price = Product.objects.aggregate(Max('price'))
print(max_price)
Результат выполнения кода:
{"price__max": 999.99}
Пример
Используем класс Max с переименованием результата для более понятного ключа:
from django.db.models import Max
from myapp.models import Product
max_price = Product.objects.aggregate(highest_price=Max('price'))
print(max_price)
Результат выполнения кода:
{"highest_price": 999.99}
Пример
Используем Max вместе с фильтрацией для получения максимального значения в определённой категории:
from django.db.models import Max
from myapp.models import Product
max_price = Product.objects.filter(
category='electronics'
).aggregate(Max('price'))
print(max_price)
Результат выполнения кода:
{"price__max": 999.99}
Пример
Класс Max может использоваться вместе с аннотацией для получения максимального значения в каждой группе:
from django.db.models import Max
from myapp.models import Product
max_prices = Product.objects.values('category').annotate(
Max('price')
).order_by('category')
for res in max_prices:
print(res)
Результат выполнения кода:
{"category": "books", "price__max": 29.99}
{"category": "electronics", "price__max": 999.99}
{"category": "furniture", "price__max": 499.50}
Пример
Применим Max к полю с датами для получения самой поздней даты создания:
from django.db.models import Max
from myapp.models import Order
latest_order = Order.objects.aggregate(Max('created_at'))
print(latest_order)
Результат выполнения кода:
{"created_at__max": "2025-12-31 15:30:00"}
Пример
Используем Max для получения самого высокого рейтинга среди комментариев к конкретной статье:
from django.db.models import Max
from myapp.models import Comment
best_rating = Comment.objects.filter(
article_id=1
).aggregate(Max('rating'))
print(best_rating)
Результат выполнения кода:
{"rating__max": 5}