gpt4 book ai didi

python - Django queryset - 是否可以在 FloatField 上进行过滤?

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:13 25 4
gpt4 key购买 nike

我正在尝试执行一个非常简单的操作,但遇到了问题。我有一个简单的模型:

class MyModel(models.Model):
date = models.DateTimeField(null=False)
value = models.FloatField(null=True)
interval = models.IntegerField(null=True)

我的目标是获得具有最大值(value)的 MyModel 对象。

#Get the value
value = MyModel.objects.filter(date__gte=’2014-05-01’, date__lte=’2014-05-31’).aggregate(Max(‘value’))[‘value__max’]

# Get the object corresponding to the max value
my_object = MyModel.objects.get(value=value)

这段代码给我一个错误:“匹配的查询不存在”……我试图硬编码一个值(存在),我有同样的错误。

我做错了什么吗?不能在 FloatField 上进行过滤吗?

谢谢。

最佳答案

这与 float 在 Python 中的表示方式有关(Django 的 FloatField 映射到 Python 的 float 和 Django 的 DecimalField 映射到 Python 的 decimal;参见 here )。

不同之处在于 float 不精确,因为它们在您的计算机上的表示方式,decimal 类型旨在解决通过以下方式出现的一些问题那(看看 docs,他们对此解释得很好)。

现在考虑到您尝试通过精确匹配获取 float 的情况,您可以尝试两件事:

  1. MyModel 上的 value 类型更改为 DecimalField (即 value = models.DecimalField(max_digits=5, decimal_places=2, null=True))

  2. 如果您希望将类型保留为 FloatField,您可以尝试查询一系列值,但最终可能会得到多个结果(因此 MyModel. objects.get() 可能会抛出异常,提示查询返回了超过 1 个结果):MyModel.objects.filter(value__range=(1.23, 1.24)) MyModel.objects.filter(value__gte=1.23, value__lt=1.24)

关于python - Django queryset - 是否可以在 FloatField 上进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com