に格納されています。今私は、このフィールドのための可変量の小数を使用できるようにしたい。したがって、商品番号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
データベースから元の値にアクセスするための最良の方法だろうか?それから私は小数点の量をチェックして正しい結果を返す私自身の方法を作ることができます。
素晴らしいです。私の質問で提案されているように、元のFloatFieldを拡張する必要がありますか、それとももっと良い方法がありますか? – Neman
はい、オリジナルのFloatFieldを使用することもできますし、float値を小数点なしで表示するには 'floatformat'を使用することもできます。 https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#floatformat – Dharmesh