Ограничить поле Django FloatField до 2 знаков после запятой
Я ищу способ ограничить FloatField в Django до 2 десятичных знаков кто-нибудь получил представление о том, как это можно сделать без использования десятичного поля.
пробовал decimal_places=2
но это просто дало мне ошибку миграции в поле float, поэтому я думаю, что этот метод должен работать только в десятичных полях.
3 ответов
Если вы только обеспокоены тем, как ваш FloatField
появляется в формах, вы можете использовать шаблон filter floatformat
.
из документов Django:
Если используется с числовым целочисленным аргументом, floatformat округляет число до такого количества знаков после запятой.
например, если value = 34.23234, то в вашем шаблоне:
{{ value|floatformat:2 }} # outputs 34.23
Если вы хотите, чтобы ваша модель всегда сохранялась только с двумя десятичными знаками, а не просто меняла представление модели в шаблоне, пользовательский метод сохранения в вашей модели будет отлично работать. Пример модели ниже показывает, как.
class MyDataModel(models.Model):
my_float = models.FloatField()
def save(self, *args, **kwargs):
self.my_float = round(self.my_float, 2)
super(MyDataModel, self).save(*args, **kwargs)
теперь каждый раз, когда вы сохраняете свою модель, вы гарантируете, что поле будет заполнено только поплавком с двумя десятичными знаками. Это можно обобщить на округление до любого числа decimal места.
поскольку Django 1.8+ вы можете использовать пользовательский валидатор для FloatField/или любых ModelFields:
def validate_decimals(value):
try:
return round(float(value), 2)
except:
raise ValidationError(
_('%(value)s is not an integer or a float number'),
params={'value': value},
)
...и в вашей модели вы можете применить его следующим образом:
from django.db import models
class MyModel(models.Model):
even_field = models.FloatField(validators=[validate_decimals])