Можем ли мы сделать сумму на CharField в Django ORM? - PullRequest
0 голосов
/ 07 июня 2018

Моя модель в Django ORM такая:

class Test(Modelbase):
    id = models.IntegerField(null=True, blank=True)
    amount = models.CharField(max_length=255)

Я хочу добавить сумму для списка идентификаторов.Единственная проблема - поле количества CharField .Как применить сумму для поля сумма ?

Test.objects.filter(id__in=[1,2,3]).aggregate(Sum('amount'))

Я использую Django=1.9.1 для этого.

1 Ответ

0 голосов
/ 07 июня 2018

вы можете попробовать сделать annotate с cast :

from django.db.models import FloatField
from django.db.models.functions import Cast

Test.objects.filter(id__in=[1,2,3]
    ).annotate(as_float=Cast('amount', FloatField())
    ).aggregate(Sum('as_float'))

Примечание для django <1.10, вы должны определить <code>Cast здесь Источник Cast Или

from django.db.models import Sum, Func, F

Test.objects.annotate(
    num=Func(
        F('amount'),
        template='%(function)s(%(expressions)s AS %(type)s)',
        function='Cast', type='float')
   ).aggregate(Sum('num'))
...