Django查询十进制字段

时间:2011-01-04 18:45:52

标签: django django-queryset

我有一个DecimalField值为5.60的对象。我正在询问:

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

这将返回正确的结果。但这不会:

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

有没有办法自动协调这种不一致?过滤器值是用户提供的,因此我想确保键入5.6的用户可以找到该对象。

1 个答案:

答案 0 :(得分:9)

iexact执行不区分大小写的等式检查,通常用于字符串。对于带有两个小数位的小数,Django数据库后端可能会将“5.60”存储为DecimalField的字符串,因此iexact与之比较将起作用,因为字符串相等。但是,如果你想比较数字而不是字符串,你应该只使用普通的相等运算符。

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

不要使用字符串,而是使用Python内置的Decimal类型。使用Django检索模型实例时,无论如何都会获得该类型的实例,因此您还应该指定此类型以保持一致。