通过序列化程序,我将56.234677之类的数字保存到FloatField
,
但我想改变它并将它们保存为int
。
我可以在它进入序列化程序之前更改它,但不确定它是否实用。
在保存之前,可以在模型输入上使用这样的东西吗?:
def iround(x):
return int(round(x) - .5) + (x > 0)
(将float / decimal舍入为int)
答案 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
(据我了解,在这种情况下,您想要小数)。