2011-01-04 9 views
4

DecimalFieldの値が5.60のオブジェクトがあります。私はクエリを作成しています:小数点のDjangoクエリ

Mdl.objects.get(speed__iexact="5.60") 

これは正しい結果を返します。しかし、これはできません:

Mdl.objects.get(speed__iexact="5.6") 

この不整合を自動的に調整する方法はありますか?フィルタ値はユーザーが入力したものなので、5.6を入力したユーザーがそのオブジェクトを見つけることができるようにしたいと思います。

+0

なぜ、最初に小数点に 'iexact'を使用していますか?私はこの質問に対する答えを知らないので、 – AndiDog

+1

。 :)私は代わりに何を使用すべきですか? –

答えて

8

iexact大文字小文字を区別しない平等チェックで、通常は文字列に使用されます。小数点以下2桁の小数点以下の桁数の場合、DjangoデータベースのバックエンドはおそらくDecimalFieldの文字列として "5.60"を格納するため、文字列が等しいため、iexactとの比較が機能します。しかし、文字列ではなくの数字を比較したいので、通常の等価演算子を使用してください。

from decimal import Decimal 
Mdl.objects.get(speed=Decimal("5.6")) 

は、Python、組み込みDecimalタイプを使用する代わりに、文字列を使用しないでください。 Djangoでモデルインスタンスを取得する場合、その型のインスタンスが取得されるため、一貫性を保つためにこの型を割り当てる必要があります。

+0

'iexact'がなくても、文字列パラメータはうまく動作します:' Mdl.objects.get(speed = "5.6") ' –

+0

右の' DecimalField'の文字列と 'Decimal'のインスタンスは、差。 – AndiDog

関連する問題