将django FloatField限制为2位小数

Aid*_*rty 11 python forms django models

我正在寻找一种方法将Django中的FloatField限制为2位小数,有人知道如何在不使用DecimalField的情况下完成此操作.

我试过decimal_places=2但这只是在float字段中给我一个迁移错误所以我认为这个方法只能在DecimalFields中工作.

pco*_*nel 35

如果您只关心FloatField表单中的显示方式,则可以使用模板过滤器floatformat.

来自Django Docs:

如果与数字整数参数一起使用,则floatformat将数字四舍五入到多个小数位.

例如,如果value = 34.23234,则在您的模板中:

{{ value|floatformat:2 }}  # outputs 34.23
Run Code Online (Sandbox Code Playgroud)


Col*_*cks 6

如果您想真正确保始终只用两位小数位保存模型,而不仅仅是更改模板中模型的显示方式,则在模型上使用自定义保存方法将非常有用。下面的示例模型显示了如何。

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)
Run Code Online (Sandbox Code Playgroud)

现在,每次保存模型时,您都将保证该字段仅填充两个小数位的浮点数。可以将其通用化为四舍五入到任意小数位数。

  • 表示与实际值不同。通过对值进行四舍五入,您会牺牲精度。 (2认同)