我有一个DecimalField值为5.60的对象。我正在询问:
Mdl.objects.get(speed__iexact="5.60")
这将返回正确的结果。但这不会:
Mdl.objects.get(speed__iexact="5.6")
有没有办法自动协调这种不一致?过滤器值是用户提供的,因此我想确保键入5.6的用户可以找到该对象。
答案 0 :(得分:9)
iexact
执行不区分大小写的等式检查,通常用于字符串。对于带有两个小数位的小数,Django数据库后端可能会将“5.60”存储为DecimalField
的字符串,因此iexact与之比较将起作用,因为字符串相等。但是,如果你想比较数字而不是字符串,你应该只使用普通的相等运算符。
from decimal import Decimal
Mdl.objects.get(speed=Decimal("5.6"))
不要使用字符串,而是使用Python内置的Decimal类型。使用Django检索模型实例时,无论如何都会获得该类型的实例,因此您还应该指定此类型以保持一致。