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