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')}