Следующее поле предназначено для форматирования денег как двухзначного десятичного числа (квантованного). Вы можете видеть, что он возвращает <decimal>.quantize(TWOPLACES)
версию сохраненного десятичного числа. Однако когда я смотрю на это в админке Django, он этого не делает. Если я вставлю 50
в поле, которое использует CurrencyField()
, и просматриваю его в админке, я получу 50
против 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
Обновление : я попытался поместить return 'Hello World'
вместо return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))
, и он даже не показал «Hello World» в оболочке. Он снова выпустил 50
. Означает ли это, что когда я получаю доступ к атрибуту модели, который является CurrencyField()
, он не вызывает to_python()
?