gpt4 book ai didi

python - Django FloatField 与存储在数据库中的小数位数

转载 作者:行者123 更新时间:2023-11-29 10:37:22 32 4
gpt4 key购买 nike

考虑以下示例模型:

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,它会自动添加小数。为了克服这个问题,我尝试扩展 FloatFieldfrom_db_value 方法,希望能够获取原始值(50 而不是50.0)。但此时该值已转换为 50.0:

class Product(models.Model):
weight = DynamicDecimalFloatField(db_index=True, null=True, blank=True)

class DynamicDecimalFloatField(models.FloatField):
def from_db_value(self, value, expression, connection, context):
print(value) # prints 50.0

return value

从数据库访问原始值的最佳方式是什么?然后我就可以制作自己的方法来检查小数位数并返回正确的结果。

最佳答案

要检索不带十进制值0的原始值,您可以使用'{0:g}'.format(float(value))

关于python - Django FloatField 与存储在数据库中的小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46182033/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com