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)