Django вычисляет сумму столбца после умножения каждой строки на отдельное значение

У меня есть три модели Django, определенные следующим образом:

class User(models.Model):
    name=models.CharField
    income=models.DecimalField
    expenditure=models.DecimalField
    group=models.DecimalField
    country = models.ForeignKey(Country)

class Country(models.Model):
    name=models.CharField
    currency = models.ForeignKey(Currency)

class Currency(models.Model):
    name=models.CharField
    value=models.DecimalField

Пользователи могут быть из разных стран. Каждая страна имеет свою валюту, стоимость которой является обменным курсом с USD.

Я пытаюсь вычислить сумму всех столбцов после умножения каждого значения на соответствующий курс обмена валюты. Например, для 3 пользователей:

John:2:10:1:2
Jame:10:11:1:1
Mark:5:11:1:1

Country
1:USA:1
2:UK:2

Currency:
1:USD:1
2:GBP:1.5

Я хотел бы вывести сумму после вычисления

income: (2*1.5) + (10*1) + (5*1) 
expenditure: (10*1.5) + (11*1) + (11*1)

Окончательный вывод:

income: 18
expenditure: 37

Я думаю, что что-то вроде этого может сработать, но я не смог понять:

user=User.objects.filter(group=1).aggregate((Sum('income')*(country_currency_value),(Sum('expenditure')*(country_currency_value))

Любая помощь будет высоко оценена

Вы должны использовать F() выражения для умножения полей вместе, затем использовать оператор __ в именах полей для ссылки на внешние ключи.

User.objects
  .filter(group=1)
  .aggregate(
    total_income=Sum(F('income') * F('country__currency__value')),
    total_expenditure=Sum(F('expenditure') * F('country__currency__value')),
  )

вернется:

{'total_income': Decimal('18'), 'total_expenditure': Decimal('37')}
Вернуться на верх