You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo域校验当前时间是否在两个日期字段间报错求助

问题分析与解决方案

这个报错的核心原因很明确:你的domain里把date_from和date_to当成了字符串字面量,而不是模型的字段引用。Odoo生成SQL时,会把'date_from'直接作为字符串值去和today字段做时间比较,自然会抛出"invalid input syntax for type timestamp"的错误——毕竟'date_from'根本不是合法的时间格式。

下面分两种常见场景给出解决办法:

场景1:过滤当前系统时间处于date_from和date_to之间的记录(最常用)

如果你真实需求是筛选出「现在正处于假期时间段内」的记录,那完全不需要自定义today字段,直接用Odoo内置的current_datetime()函数获取当前系统时间即可:

XML配置写法

<field name="domain">[('date_from', '&lt;=', current_datetime()), ('date_to', '&gt;=', current_datetime())]</field>

这里的current_datetime()会动态返回服务器当前的日期时间,生成的SQL会正确比较字段值和当前时间,不会出现语法错误。

场景2:比较记录自身的today字段与date_from/date_to字段

如果你确实需要用记录里的today字段(比如记录创建时的时间)去和另外两个字段做比较,需要明确告诉Odoo:右边的是字段引用,不是字面量字符串。在XML的domain里,要把字段名放在元组中:

XML配置写法

<field name="domain">[('today', '&gt;=', ('date_from',)), ('today', '&lt;=', ('date_to',))]</field>

这样Odoo会识别('date_from',)是字段引用,生成的SQL会变成hr_holidays.today >= hr_holidays.date_from这种字段间的比较,而不是拿字符串去转时间戳。

补充:Python代码中的domain写法

如果是在Python代码里定义domain,写法会更简洁(Odoo会自动识别字符串形式的字段名):

# 场景1的Python写法
domain = [('date_from', '<=', fields.Datetime.now()), ('date_to', '>=', fields.Datetime.now())]

# 场景2的Python写法
domain = [('today', '>=', 'date_from'), ('today', '<=', 'date_to')]

内容的提问来源于stack exchange,提问作者Prashanth K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:03:48