Django:为什么这个自定义模型字段的行为不符合预期?

oro*_*aki 4 django django-templates

以下字段用于将货币格式化为两位十进制(量化).您可以看到它返回<decimal>.quantize(TWOPLACES)存储的十进制版本.但是,当我在Django管理员中查看它时,它不会这样做.如果我投入50到使用现场CurrencyField(),并查看它在管理,我得到50VS 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
Run Code Online (Sandbox Code Playgroud)

更新:我尝试return 'Hello World'代替,return super(CurrencyField, self).to_python(value).quantize(Decimal('0.01'))它甚至没有在shell中显示'Hello World'.它又熄灭50了.这是否意味着当我访问模型的属性时,CurrencyField()它不会调用to_python()

3le*_*gos 6

也许你可以尝试将它添加到你的领域:

__metaclass__ = models.SubfieldBase
Run Code Online (Sandbox Code Playgroud)

另见这里.