2015-10-20 67 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如果你想開始使用「整數」(什麼我明白了,在這種情況下,你想小數)。