Как округлить поле 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')