Как округлить поле MoneyField в Django

Используйте django-money для отражения курса товара. Модель определяется следующим образом.

class ItemPrice(models.Model):
"""
Item price
"""
rate = MoneyField(_('Unit rate'), max_digits=10, decimal_places=2, default_currency='USD')

Если я хочу иметь округленный курс в шаблоне, например, USD200, но не USD200.23, как написать код?

Есть несколько способов сделать это. Во-первых, вы можете изменять целые и плавающие числа в логике представления, например:

import math

rounded = math.floor(200.23)
print(rounded)
# result is 200

Также проверьте шаблонные теги floatformat в Django, которые могут подойти для ваших нужд:

# for example in your view:

context = { 'value': 34.23234 }

# and in your template:

{{ value|floatformat:"0" }}

# will display 34

Документация по тегам floatformat здесь.

Примечание: я не знаю, каковы особенности MoneyField, поскольку не думаю, что это часть ядра Django. Я предполагаю, что оно хранит плавающие числа.

Я написал одну.

@property
def standard_selling_rate_usd_rounded(self):
    amount = self.standard_selling_rate_usd.amount
    rounded = math.floor(int(amount))
    return Money(rounded, 'USD')
Вернуться на верх