Odoo计算型Selection字段报无选项断言错误问题问询
错误产生原因
- Odoo的
fields.Selection类型字段强制要求传入selection参数定义可选值列表,哪怕是计算字段也不例外。你在Member模型中定义的kin_relation_with_member字段仅指定了compute属性,未提供selection可选值列表,Odoo初始化字段时触发了断言校验失败。 - 附加逻辑问题:当前的compute方法写法不符合Odoo规范,未遍历当前记录集self,也未添加依赖装饰器,会导致后续多记录操作、字段自动更新触发异常。
- 取值问题:原代码中赋值的
'Null'如果没有预先加入selection可选值列表,后续也会触发取值不合法的报错。
解决方法
- 给Selection字段补充可选值列表,推荐直接复用Kin模型的配置避免重复定义,示例代码如下:
# Member模型新增方法,复用Kin模型的亲属关系选项 def _get_kin_relation_selection(self): # 将下方的your.kin.model.name替换为你Kin模型的实际模型名 return self.env['your.kin.model.name']._fields['relation_with_member'].selection # 修正后的字段定义 kin_relation_with_member = fields.Selection( selection='_get_kin_relation_selection', compute='_is_kin_relation', string="Kin Relation" )
如果不想复用,也可以直接把Kin模型中selection的列表复制到该字段的selection参数中。
- 修正compute方法的逻辑,添加依赖装饰器保证字段自动更新:
@api.depends('kin_line_ids.is_kin', 'kin_line_ids.relation_with_member') def _is_kin_relation(self): for record in self: relation = False for kin in record.kin_line_ids: if kin.is_kin: relation = kin.relation_with_member break record.kin_relation_with_member = relation
内容的提问来源于stack exchange,提问作者Fawad 4bros
相关产品推荐
相关产品推荐

