Django: Удаление нулей в конце поля модели Django

Я делаю трейлинг, чтобы избавиться от ненужных нулей в конце поля моей модели Django:

class mycls(BaseModel):
    price = models.DecimalField()

Я даже пытался создать новое поле. Вот поле Django, которое я создал:

class CurrencyField(models.DecimalField):
    INTEGER_PLACES = 15
    DECIMAL_PLACES = 18

    DECIMAL_PLACES_FOR_USER = 6

    MAX_DIGITS = INTEGER_PLACES + DECIMAL_PLACES

    MAX_VALUE = Decimal('999999999999999.999999999999999999')
    MIN_VALUE = Decimal('-999999999999999.999999999999999999')

    def __init__(self, verbose_name=None, name=None, max_digits=MAX_DIGITS,
                 decimal_places=DECIMAL_PLACES, **kwargs):
        super().__init__(verbose_name=verbose_name, name=name, max_digits=max_digits,
                         decimal_places=decimal_places, **kwargs)

С помощью этой функции я хочу удалить трелинг из этого поля

def normalize_fraction(d):
    normalized = d.normalize()
    sign, digit, exponent = normalized.as_tuple()
    return normalized if exponent <= 0 else normalized.quantize(1)

Как я могу использовать эту функцию внутри класса поля для удаления нулей в конце поля?

  • Я хочу делать это на уровне модели, а не шаблонов или представлений

Вам следует переопределить to_python, попробуйте что-нибудь вроде этого:

class CurrencyField(models.DecimalField):
    ...
    ...
    ...
    def to_python(self, value):
        value = super().to_python(value=value)

        if value is None:
            return value
        return normalize_fraction(value)
Вернуться на верх