首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将django FloatField限制为2位小数

将django FloatField限制为2位小数
EN

Stack Overflow用户
提问于 2014-05-19 21:25:56
回答 3查看 44.7K关注 0票数 26

我正在寻找一种方法来限制FloatField在Django的2个小数位有谁有线索可以做到这一点,而不必使用DecimalField。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-19 22:02:33

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

来自Django文档:

如果与数字整型参数一起使用,则将数字四舍五入到小数位数。

例如,如果值= 34.23234,则在模板中:

代码语言:javascript
运行
复制
{{ value|floatformat:2 }}  # outputs 34.23
票数 61
EN

Stack Overflow用户

发布于 2017-09-07 01:22:20

如果你想实际确保你的模型总是保存时只有两位小数,而不是仅仅改变模型在模板中的表示,那么在你的模型上使用一个自定义的保存方法将会非常有效。下面的示例模型显示了如何实现。

代码语言:javascript
运行
复制
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)

现在,每次保存模型时,您将保证该字段将只填充两个小数位的浮点数。这可以概括为四舍五入到任意数量的小数位。

票数 13
EN

Stack Overflow用户

发布于 2017-07-04 18:53:04

自从Django 1.8+以来,你可以使用一个自定义的验证器来验证FloatField/或者任何ModelFields:

代码语言:javascript
运行
复制
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在你的模型中,你可以这样应用它:

代码语言:javascript
运行
复制
from django.db import models

class MyModel(models.Model):
    even_field = models.FloatField(validators=[validate_decimals])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23739030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档