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

标签 python mysql django orm

考虑以下示例模型:

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/

相关文章:

php - MySQL查询 - 一个表中的单行,另一个表中的多行

mysql - 如何将本地 MySQL 数据库部署到 Heroku

python - 如何检查 Python unicode 字符串是否包含非西方字母?

python - 在 Django 中使用交互式控件制作 Bokeh 图

python - 如何将 while 循环中的数据放入表中?

python - OpenCV 在 Python 和 C++ 实现中对 HOG 对象检测的不同结果

python - 如何解决 "ERROR: Failed building wheel for doom-py"

python - 使用欧拉法求解 4D 耦合系统

python - 为什么在 Google App Engine 上使用 Django?

php - 从 PHP 和 MySQL 的 3 个随机数据中选择 4 列