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()),
)
Вернуться на верх