Django - 将浮点数作为INT保存到模型中

时间:2015-10-20 20:06:42

标签: python django django-models

通过序列化程序,我将56.234677之类的数字保存到FloatField, 但我想改变它并将它们保存为int

我可以在它进入序列化程序之前更改它,但不确定它是否实用。

在保存之前,可以在模型输入上使用这样的东西吗?:

def iround(x):    
    return int(round(x) - .5) + (x > 0)

(将float / decimal舍入为int)

1 个答案:

答案 0 :(得分:0)

是的,您可以在保存之前对“数字属性”执行某些操作(在django模型中)。像这样(覆盖默认的save方法):

class SomeModel(models.Model):
    field_x_float = models.DecimalField(max_digits=6, decimal_places=4)
    field_x_int = models.DecimalField(max_digits=6, decimal_places=0)

    def save(self, *args, **kwargs):
        self.field_x_int = round(int(self.field_x_float))
        super(SomeModel, self).save(*args, **kwargs)

当您保存此模型时,django-models将“抓住”field_x_float的值,将其四舍五入,最后将值存储在field_x_int中,这样您就可以保留数字的“int”(十进制)和float版本(不确定你是否想要这个)。

注意:如果您想开始使用“整数”,则可能需要将FloatField更改为DecimalField(据我了解,在这种情况下,您想要小数)。