以下字段旨在将货币格式化为两位小数(量化)。可以看到它返回了一个<decimal>.quantize(TWOPLACES)
存储的十进制版本。然而,当我在 Django 管理中查看此内容时,它并没有这样做。如果我输入50
到正在使用的字段CurrencyField()
并在管理中查看它,我明白了50
vs 50.00
。这是为什么?
from django.db import models
from decimal import Decimal
class CurrencyField(models.DecimalField):
"""
Only changes output into a quantized format. Everything else is the same.
"""
def __init__(self, *args, **kwargs):
kwargs['max_digits'] = 8
kwargs['decimal_places'] = 2
super(CurrencyField, self).__init__(*args, **kwargs)
def to_python(self, value):
try:
return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
except AttributeError:
return None
Update: 我试过放return 'Hello World'
代替return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
它甚至没有在 shell 中显示“Hello World”。它推出了50
再次。这是否意味着当我访问模型的属性时CurrencyField()
它不叫to_python()
?
也许您可以尝试将其添加到您的字段中:
__metaclass__ = models.SubfieldBase
另请参阅here http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#the-subfieldbase-metaclass.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)