我有多个模型与多个DecimalField代表金钱,如100.34欧元。
我的目标是在管理员列表视图中显示货币,如下图所示。
http://i.imgur.com/XKEQFp9.png
然而,我无法找到一种方法来做到这一点,为每一个金钱领域。
我试着创建一个自定义的MoneyField,继承DecimalField并修改unicode表示,但它不起作用。
我也尝试了https://github.com/jakewins/django-money,但没有运气。
我研究了django admin的源代码,终于发现了问题:
在django.admin.contrib.admin.util.py的display_for_field函数中,它检查值是否是DecimalField的示例,如果是,它将其显示为十进制数。
elif isinstance(field, models.DecimalField):
return formats.number_format(value, field.decimal_places)
这是有道理的,但它阻止我在管理中显示欧元符号/文本。
我怎样才能解决这个问题?
我知道我可以简单地对每个字段使用一个方法,将格式化的值显示为字符串,但我想知道是否有更干燥的方法。
4条答案
按热度按时间2wnc66cl1#
要在admin列表中显示,可以在
ModelAdmin
类中创建一个自定义函数,调用该函数来格式化每个值:w6lpcovy2#
或者创建这样的类并从其继承
yebdmbv43#
有两种方式可以显示**“34.00 EUR”,这样,即使小数位为零**,您也可以始终显示带有第二个小数位的数字。
〈第一条路〉
用models.DecimalField和
decimal_places=2
定义price
,如下所示:然后,定义
price_with_EUR()
并将其分配给list_display,如下所示:〈第二条路〉
使用**
@property
装饰器定义price_with_EUR()
,如下所示”models.py“**。”models.py“:
然后,将
price_with_EUR()
赋值给list_display
,如下所示:xnifntxz4#
在
0.12
版本之前,Django管理员部分支持django-money
货币表示。自
0.12
版本(2017年10月22日发布)起,所有MoneyField
表示(包括Django的admin)都可以配置特殊的格式化程序。