2015-10-20 68 views
1

通过串行器我将数字保存为56.234677至FloatField, ,但我想更改并将它们保存为intDjango - 将浮点数保存为INT至模型

我可以在它传递到串行器之前更改它,但不确定这是否实用。

可以像这样的模型输入使用之前将它保存?:

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

(发飘/十进制为int)是的,你可以做一些你的“号码属性”之前

+0

为什么不使用'round(int(number))'? ([more here](https://docs.python.org/2/library/functions.html#round)) – jlnabais

回答

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的车型将“抢” field_x_float的值,将圆它,并最终将值存储在field_x_int,这样你可以保留“int”(十进制)和数字的浮点版本(不知道你是否想要这个)。

注:可能必须改变FloatFieldDecimalField如果你想开始使用“整数”(什么我明白了,在这种情况下,你想小数)。