2017-09-12 8 views
0

に格納されています。今私は、このフィールドのための可変量の小数を使用できるようにしたい。したがって、商品番号50の商品を保存する場合は、50としてデータベースに保存する必要があります。重量が50.0の場合は、50.0として保存する必要があります。これはデフォルトの動作であるように見えます。そのため、ウェイトは最初に保存された方法と同様にデータベースに保存されます。ジャンゴFloatField次の例のモデルを検討してデータベース

ただし、データベースから製品を取得する場合、元の重みは50で、50.0に変換されるため、10進数が追加されます。これはおそらく、取得した値がDjangoのfloatに変換され、自動的に小数点が追加されるためです。この問題を解決するために、私はのfrom_db_valueメソッドを拡張しようとしました。元の値(の代わりに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 

データベースから元の値にアクセスするための最良の方法だろうか?それから私は小数点の量をチェックして正しい結果を返す私自身の方法を作ることができます。

答えて

1

0の小数点なしの元の値を取得するには、'{0:g}'.format(float(value))を使用できます。

+0

素晴らしいです。私の質問で提案されているように、元のFloatFieldを拡張する必要がありますか、それとももっと良い方法がありますか? – Neman

+1

はい、オリジナルのFloatFieldを使用することもできますし、float値を小数点なしで表示するには 'floatformat'を使用することもできます。 https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#floatformat – Dharmesh

関連する問題