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的用户可以找到该对象.
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检索模型实例时,无论如何都会获得该类型的实例,因此您还应该指定此类型以保持一致.