考虑以下示例模型:
class Product(models.Model):
weight = FloatField(db_index=True, null=True, blank=True)
FloatField
将是MySQL中double
类型的字段。现在我希望能够为此字段使用可变的小数位数。因此,当我保存重量为50
的产品时,必须将其存储为数据库中的50
。当权重为50.0
时,必须将其存储为50.0
。这似乎是默认行为,因此权重存储在数据库中,就像最初保存它们一样。
但是,从数据库中检索产品时,原始权重50
将转换为50.0
,因此会添加小数。这可能是因为检索到的值将在Django中转换为float
,这会自动添加小数。为了克服这个问题,我尝试扩展from_db_value
的{{1}}方法,希望能够获取原始值(FloatField
而不是50
)。但此时该值已转换为50.0
:
50.0
从数据库访问原始值的最佳方法是什么?然后我就可以使用自己的方法来检查小数位数并返回正确的结果。
答案 0 :(得分:1)
要检索没有0
小数值的原始值,您可以使用'{0:g}'.format(float(value))
。