Odoo中使用create_date自动字段计算其他字段遇问题求助
问题:使用Odoo自动字段create_date计算字段值时的报错处理
正在学习Odoo文档第9章,想要使用自动字段create_date来计算另一个字段的值,以下是模型代码:
_name = "estate.offer" _description = "this is work as a offer offered to our real estate model" _log_access = True price = fields.Float() status = fields.Selection(selection=[('accepted', 'Accepted'), ('refused', 'Refused')], copy=False) partner_id = fields.Many2one("res.partner", string="Partner", required=True) property_id = fields.Many2one("estate.model", 'offer_id', required=True) validity = fields.Integer(compute="_inverse_date_deadline", inverse="_compute_date_deadline") date_deadline = fields.Date(string="Date Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline") api.depends('create_date', 'validity') def _compute_date_deadline(self): for record in self: record.date_deadline = record.create_date + datetime.timedelta(days=record.validity) # problem in this function api.depends('create_date', 'date_deadline') def _inverse_date_deadline(self): #print('f ddd {5} xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxx') for record in self: record.validity = (record.date_deadline - record.create_date).days
在_inverse_date_deadline函数中遇到问题,Odoo文档给出提示:
提示:
create_date仅在记录创建时才会被赋值,因此你需要设置一个回退机制来避免创建记录时程序崩溃。
解决方案
记录创建阶段create_date尚未生成,直接执行日期减法运算会触发错误。同时create_date是datetime类型,date_deadline是date类型,直接相减会有类型不匹配问题,修改后的函数如下:
api.depends('create_date', 'date_deadline') def _inverse_date_deadline(self): for record in self: # 空值判断+类型转换,避免创建时崩溃 if record.create_date and record.date_deadline: record.validity = (record.date_deadline - record.create_date.date()).days else: record.validity = 0
内容的提问来源于stack exchange,提问作者Elfadil Sulieman
相关产品推荐
相关产品推荐

