Django将DecimalField格式化为money

wwodge7n  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(132)

在我的Django项目中,我在decimalField中保存了一笔钱。问题是我打印时数字的格式。我需要它在德国货币格式10.000,00欧元,所以第一个点作为分隔符和一个逗号的美分。在Django中,我只能用逗号分隔所有的东西,比如10,000,00
有没有人知道我如何按照我想要的方式实现它?

vwoqyblh

vwoqyblh1#

也许最干净的方法是用locale化它。首先检查您的系统是否支持德语locale,例如Debian:

$ locale -a

这将列出所有地区的,名称可以在不同的系统。如果未显示区域设置,则可以使用以下命令生成一个:

$ sudo locale-gen de_DE
$ sudo locale-gen de_DE.utf8
$ sudo update-locale

现在我们可以使用这个区域设置来格式化数字:

import locale

class MyModel(models.Model):
    amount = models.DecimalField(max_digits=12, decimal_places=2)

    @property
    def as_money(self):
        locale.setlocale(local.LC_ALL, 'de_DE.utf8')
        return locale.format('€ %.2f', self.amount, grouping=True, monetary=True)

然后,您可以将其用于MyModel对象my_modelmy_model.as_money
通常,货币符号放在金额的前面,以防止人们在前面写数字(而在末尾写数字通常不是问题)。

相关问题