2014-01-08 11 views
6

Django 1.6、Python 2.7.5以降、PostgreSQL 9.1、Linux。DecimalFieldは、ゼロを0E-10に変換します。

私はこのようなモデルで定義されたいくつかの十進数フィールドがあります:私は0(ゼロ)を入力し、私は値として0E-10を取得するには、オブジェクトを保存するときに、管理インターフェイスを介して

min_inclusive = models.DecimalField(_('minimum inclusive'), max_digits=19, 
        decimal_places=10, 
        help_text=_("Enter the minimum (inclusive) value for this concept."), 
        null=True, blank=True) 

を。

なぜ、ゼロを保存して表示するのはなぜですか?

decimal_placesが強制されている場合、または最大数である場合、ドキュメントでは指定されていません。

これは10個所がであるためです。?もしそうなら、既定のフォームウィジェット、TextInputを使用すると、それは私にはそのサイズに拡大するか、少なくともそのサイズにスクロールしなければならないようです。私もこの問題に遭遇し、あなたが実際にあなたがコンソールDecimal("0E-10")でこれを見ることができます。このDecimal("0.0000000000")のようなものを定義した場合、実際にすべてのものは、Pythonで、右に動作していることを見出した

+0

を修正問題はPostgresのバックエンドまたはPsycopg 2.5.2アダプタ内にあるように見えます...私は同じ問題とpostgresの中のデータを持っているが0.00000000ですが、 Decimal( "0E-8")として表示されます(シェルアクセスではなく私はsqlite3バックエンドに切り替える場合は、それは完全に動作します – xblitz

答えて

8

0.0000000000として、それが保存されているPostgreSQLでは

私はそれをDので、すべてがsqliteの中で正常に動作して、生産のために Postgresのsqlite3のバックエンドから変換された私の状況で
>>> Decimal("0.0000000000") 
Decimal('0E-10') 

明示的にすべての小数点を表示(または格納)しないので、0をsqliteの数値フィールドに挿入してください。あなたはそれを選択する場合は、それが0

を返しますが、あなたがPostgresの数値フィールドに0を挿入した場合には、小数点以下にゼロの塗りつぶしを行いますので、Pythonが小数でこれを置くとき、あなたはDecimal("0E-10")

が表示されます 0.0000000000を挿入します

UPDATE - ジャンゴことによってそれをフェッチするときはDjango 1.8で

+1

しかし、完全性のために、問題にソリューションを投稿します。 はい、Djangoはフィールドの内容をdecimal.Decimalオブジェクトとして保存します。テンプレートで、またはファイルに書き出す場合(必要な場合)、書式設定オプションを使用する必要があります。以前に使用されたモデルのフィールドを使用して 例: STR( '%10グラム' %のself.min_inclusive).strip() これは、すべての非有意ゼロを除去します。それでゼロのために私に '0'を与えます。 –

+0

***ヒント:***テンプレートでは、{{value | floatformat}} 'を使用して小数点以下の賢明な出力を得ることができます。 –

+0

フレームワークアップデートで回答を更新するための名誉! – cbaldan

関連する問題