Django Infinity作为日期时间默认值

时间:2019-02-07 00:14:21

标签: django postgresql

我正在努力查看如何添加具有无限结束日期的datetime字段。

将默认值设置为'infinity'会导致Django.core异常

django.core.exceptions.ValidationError: ["'infinity' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

NB:这与将其定义为Null(无)不同。在postgres中特别支持它,例如仅作为字符串条件检查

SELECT * FROM table WHERE dt = 'infinity'; // or
SELECT * FROM table WHERE NOT isfinite(dt);

在此不会显示空值,也不能对Null值执行两次之间的条件,除非您将其封闭,但这会导致顺序扫描。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Django ORM将infinity转换为datetime.max,因此请考虑改用datetime.max

$ psql -d yourdb
yourdb=# UPDATE app_yourmodel SET last_login = 'infinity' WHERE id = 1;

$ python3 manage.py shell
>>> from app.models import YourModel
>>> from datetime import datetime
>>>
>>> YourModel.objects.get(id=1).last_login
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999, tzinfo=<UTC>)
>>>
>>> datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)