Django: Агрегация, заставить Avg возвращать целое число вместо десятичной дроби
Есть ли способ, как я могу заменить эту функцию ugly stats['price_avg'] = round(stats['price_avg'])
на лучшее решение? Я пытался использовать функцию ORM Round(), но она возвращает в формате X.0. Мне нужно только целое число без десятичных знаков.
stats = Ad.objects.aggregate(
ads_total=Count('pk'),
price_min=Coalesce(Min('price'), Val(0)),
price_avg=Coalesce(Avg('price'), Val(0.0)),
price_max=Coalesce(Max('price'), Val(0)),
)
stats['price_avg'] = round(stats['price_avg'])
Например, прямо сейчас я получаю такую полезную нагрузку API:
{
"ads_total": 9,
"price_min": 35,
"price_avg": 426.1111111111111,
"price_max": 1500
}
Что я хочу:
{
"ads_total": 9,
"price_min": 35,
"price_avg": 426,
"price_max": 1500
}
Вы можете использовать cast()
:
from django.db.models import IntegerField
from django.db.models.functions import Cast
stats = Ad.objects.aggregate(
ads_total=Count('pk'),
price_min=Cast(Coalesce(Min('price'), Val(0)), output_field=IntegerField()),
price_avg=Cast(Coalesce(Avg('price'), Val(0.0)), output_field=IntegerField()),
price_max=Cast(Coalesce(Max('price'), Val(0)), output_field=IntegerField()),
)