如何在Django FloatField中设置正无穷和负无穷?

6 投票
2 回答
2911 浏览
提问于 2025-04-15 12:52

我想在一个浮点数字段里放入无穷大,但这似乎不行。我该怎么解决这个问题呢?

f = DjangoModel(float_value=float('inf')) #ok
f.save() #crashes

结果是:

Traceback (most recent call last):
...
ProgrammingError: column "inf" does not exist
LINE 1: ... "float_value") VALUES (inf)

我正在使用Django 1.0.2和PostgreSQL 8.3

2 个回答

0

应该是'infinity',对吧?不过,我不太确定这个值能不能存储在浮点数字段里。用float('infinity')会返回inf,而这应该是字符字段。

补充:不幸的是,要知道Django使用的是哪个C库,得深入研究一下。我建议你先弄清楚浮点数字段里实际存储的是什么值,或者至少确定返回的是什么。如果确实是"inf",那么它就不能正确存储在浮点数字段里。

5

看起来Django的ORM(对象关系映射)对这个问题没有特别的处理。Python中表示无限大的值是inf和-inf,而PostgreSQL数据库想要的是'Infinity'和'-Infinity'。很明显,Django的ORM没有处理这种转换。

所以你可能需要修复一下ORM。还有要考虑的是,其他的SQL数据库可能会需要不同的格式,或者根本不支持无限大的值。

撰写回答