Django查询十进制字段

Ed.*_*Ed. 4 django django-queryset

我有一个DecimalField值为5.60的对象.我正在查询:

Mdl.objects.get(speed__iexact="5.60")
Run Code Online (Sandbox Code Playgroud)

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

Mdl.objects.get(speed__iexact="5.6")
Run Code Online (Sandbox Code Playgroud)

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

And*_*Dog 9

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

from decimal import Decimal
Mdl.objects.get(speed=Decimal("5.6"))
Run Code Online (Sandbox Code Playgroud)

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