Как получить результат с плавающей точкой с определенной точностью в выражениях F () набора запросов Django - PullRequest
1 голос
/ 24 апреля 2019

addon_income = round(pendingAmount*0.1, 2)
print(addon_income)  # if pendingAmount = 6, addon_income = 0.6 which is ok here

Wallet.objects.filter(id=###).update(
    active=F('active')+addon_income, total=F('total')+addon_income,
    uddate_time=timezone.now()
)

В приведенном выше наборе запросов, если F («активный») = 41,2, F («общий») = 41,2 и addon_income = 0,6, активным и общим становится41.800000000000004 и 41.800000000000004 после обновления.

Я пытался использовать round () в наборе запросов, как показано ниже:

Wallet.objects.filter(id=###).update(
    active=round(F('active')+addon_income, 2), total=round(F('total')+addon_income, 2),
    uddate_time=timezone.now()
)

но возвращается ошибка: тип CombinedExpression не определяет round метод

У кого-нибудь есть предложения?Thx!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я попробовал решение в этом посте: Django ORM, как округлить среднее значение

class Round(Func):
  function = 'ROUND'
  arity = 2

Book.objects.all().aggregate(Round(Avg('price'), 2))
0 голосов
/ 24 апреля 2019

Django имеет функцию Cast, которую можно использовать в запросах.В этой функции вы можете указать FloatField(decimal_places=2)

...