【问题标题】:Django query on decimal field十进制字段的Django查询
【发布时间】:2011-01-04 18:45:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你为什么首先使用iexact 来表示小数?
  • 因为我不知道这个问题的答案。 :) 我应该改用什么?

标签: django django-queryset


【解决方案1】:

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

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

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

【讨论】:

  • 虽然没有iexact,但字符串参数可以正常工作:Mdl.objects.get(speed="5.6")
  • 对,对于DecimalFieldDecimal 的字符串和实例没有区别。
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 2017-05-28
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2017-11-07
  • 1970-01-01
相关资源
最近更新 更多