Django: Почему это поле пользовательской модели не работает должным образом? - PullRequest
4 голосов
/ 18 января 2010

Следующее поле предназначено для форматирования денег как двухзначного десятичного числа (квантованного). Вы можете видеть, что он возвращает <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()?

1 Ответ

6 голосов
/ 18 января 2010

Может быть, вы можете попробовать добавить это в ваше поле:

__metaclass__ = models.SubfieldBase

Также см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...