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

Odoo 16计算字段报错:datetime.date与bool无法进行大于比较

问题解决:Odoo计算字段日期比较类型错误

错误原因

报错TypeError: '>' not supported between instances of 'datetime.date' and 'bool'的核心问题是:
计算字段full_delivery_date设置的default参数对计算字段无效,方法执行时该字段初始值为False(布尔类型),当和订单行的delivery(日期类型)进行比较时,触发类型不兼容错误。

修正代码

主模型operations.purchaseorder修正后代码

full_delivery_date = fields.Date(string="Full Delivery Date (calculated)", compute='_compute_deliver_date')

order_line_ids = fields.One2many('operations.purchaseorderline','purchase_order_id',string="Order Lines")

@api.depends('order_line_ids.delivery')
def _compute_deliver_date(self):
    for record in self:
        # 初始化默认日期为当天
        max_delivery_date = fields.Date.today()
        if record.order_line_ids:
            # 过滤掉未设置交付日期的订单行,提取有效日期列表
            valid_dates = [line.delivery for line in record.order_line_ids if line.delivery]
            if valid_dates:
                # 取最大的交付日期
                max_delivery_date = max(valid_dates)
        record.full_delivery_date = max_delivery_date

关联模型operations.purchaseorderline代码无需修改

purchase_order_id = fields.Many2one('operations.purchaseorder',string='Purchase Order')
delivery = fields.Date("Promised Delivery Date")

关键修改说明

  • 移除计算字段的default参数:计算字段的值完全由compute方法控制,设置default不会生效,反而会造成误解。
  • 初始化日期变量为明确的日期类型:避免和布尔值进行比较操作。
  • 过滤空日期:防止订单行未设置交付日期时,max()函数报错。
  • 更新依赖字段为order_line_ids.delivery:确保订单行的交付日期修改时,自动触发计算字段更新,而不仅仅是订单行的增删操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:02:50