我正在寻找一种方法来限制FloatField在Django的2个小数位有谁有线索可以做到这一点,而不必使用DecimalField。
我尝试了decimal_places=2
,但这只是在float字段中给了我一个迁移错误,所以我认为这个方法只能在DecimalFields中工作。
发布于 2014-05-19 22:02:33
如果您只关心FloatField
在表单中的显示方式,则可以使用模板筛选器floatformat
。
来自Django文档:
如果与数字整型参数一起使用,则将数字四舍五入到小数位数。
例如,如果值= 34.23234,则在模板中:
{{ value|floatformat:2 }} # outputs 34.23
发布于 2017-09-07 01:22:20
如果你想实际确保你的模型总是保存时只有两位小数,而不是仅仅改变模型在模板中的表示,那么在你的模型上使用一个自定义的保存方法将会非常有效。下面的示例模型显示了如何实现。
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)
现在,每次保存模型时,您将保证该字段将只填充两个小数位的浮点数。这可以概括为四舍五入到任意数量的小数位。
发布于 2017-07-04 18:53:04
自从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},
)
...and在你的模型中,你可以这样应用它:
from django.db import models
class MyModel(models.Model):
even_field = models.FloatField(validators=[validate_decimals])
https://stackoverflow.com/questions/23739030
复制相似问题