Джанго запрос по десятичному полю - PullRequest
4 голосов
/ 04 января 2011

У меня есть объект со значением DecimalField 5.60. Я делаю запрос:

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

Это вернет правильный результат. Но это не будет:

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

Есть ли способ автоматически примирить это несоответствие? Значение фильтра предоставлено пользователем, поэтому я хочу быть уверен, что пользователь, набравший 5.6, сможет найти объект.

1 Ответ

9 голосов
/ 04 января 2011

iexact выполняет проверку равенства без учета регистра, которая обычно используется для строк.Для десятичных чисел с двумя десятичными разрядами серверная часть базы данных Django, вероятно, будет хранить «5,60» в виде строки для DecimalField, поэтому iexact-сравнение с этим будет работать, поскольку строки равны.Но так как вы хотите сравнить числа , а не строки, вы должны просто использовать оператор нормального равенства.

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

Не используйте строки, вместо этого используйте встроенную в Python Десятичный тип .При извлечении экземпляров модели с помощью Django вы все равно получите экземпляры этого типа, поэтому вам также следует назначить этот тип для обеспечения согласованности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...