我正在寻找一种方法来限制Django中的FloatField只保留2位小数。有人知道如何做到这一点而不使用DecimalField吗?
我尝试了decimal_places=2,但这只给了我一个在float字段中的迁移错误。所以,我认为这个方法只能在DecimalFields中起作用。
我尝试了decimal_places=2,但这只给了我一个在float字段中的迁移错误。所以,我认为这个方法只能在DecimalFields中起作用。
如果您只关心 FloatField
在表单中的显示方式,您可以使用模板过滤器floatformat
。
Django文档中写道:
如果与一个整数参数一起使用,
floatformat
将数字四舍五入到小数点后几位。
例如,如果value = 34.23234,在您的模板中:
{{ value|floatformat:2 }} # outputs 34.23
FloatField(default=0.00)
,但保存时会删除小数位中无用的 0
,这是有道理的... 但我想在模板中显示一致的值 0.00
或 5.43
... {{ value|floatformat:2 }}
就解决了问题。 - Lal如果你希望确保你的模型总是只保存两位小数,而不仅仅是在模板中更改模型的呈现方式,那么在你的模型上使用自定义保存方法会非常有效。下面是一个示例模型。
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)
现在每次保存模型时,您将确保该字段仅填充两位小数的浮点数。这可以推广到舍入到任意位小数。
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])
DecimalField
? - alecxemodels.FloatField(default=to_some_value)
- ajknzhol