DjangoORM:Decimal fieldはDecimal型でフィルターをかけないと死にかけます
症状
diciをDecimal Fieldのモデルフィールド(モデル名はSomething)として、
Something.objects.all().filter(dici=1.123) あるいは、 Something.objects.all().filter(dici=float("1.123"))
とフィルターをかけるとする。Decimal Fieldに、1.123とDecimal fieldで定義した桁数内の小数ならフィルターできるんじゃないのと思っていた。実際$python manage.py runserver ではうまく機能していることを確認(これがひっかけで小数なら結構ガバガバにフィルターかけれるんだ楽〜という先入観を持ってしまった・・・)。
だがしかし・・・
本番環境では許してもらえなかった。クエリが見つからないとエラーがドンドン出てくる・・・orz
Something.objects.get(id=1)
とかidで絞るとクエリは引っかかるので、モデル自体は読み込めてることも分かる・・・
解決策
Decimal型は、フィルターを確実にかけるにはDecimal型に直さないとだめ。
from decimal import Decimal #インポート必要! Something.objects.all().filter(dici=Decimal("1.123"))
これでフィルターかけられます。