Django агрегированная сумма валюты (строка) + значение (плавающая величина)
Я выполнял некоторые вычисления с использованием агрегатной суммы следующим образом:
total_value = myModel.objects.aggregate(sum=Sum('price'))
Проблема в том, что поле price
изменилось на charfield, содержащий валюту + значение, и я не могу сделать сумму.
Пример:
ID | price |
---|---|
1 | USD 34.33 |
2 | USD 64.33 |
Ожидаемый результат:
total_value = USD 34 + USD 64 = USD 98.66
Что я пробовал:
Я попытался выполнить сумму price
, игнорируя первые 4 символа, следующим образом:
total_value = myModel.objects.aggregate(sum=Sum('price'[4:]))
к сожалению, моя идея не работает
Любая помощь будет высоко оценена
Вам действительно не следует хранить числа в таком поле CharField, это означает, что остальная часть вашего кода должна быть компенсирована в результате. Я бы предложил разделить вашу валюту в другое поле, тогда вы сможете просто Sum
агрегировать, как вы делали раньше.
Если вы действительно не можете изменить структуру модели, то может сработать что-то вроде этого - со ссылкой на этот ответ:
myModel.objects.annotate(
cost=Cast(
Substr('price', StrIndex('price', V(' '))), DecimalField()
)
).aggregate(Sum('cost'))