考虑以下示例模型:
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
,它会自动添加小数。为了克服这个问题,我尝试扩展 FloatField
的 from_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/