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
相关产品推荐
相关产品推荐

