Odoo 15中如何动态修改选择字段选项?求助
问题分析与解决
你遇到的错误有两个核心原因:
- 方法缩进错误:
@api.onchange('em_x')装饰器后的方法定义缩进不正确,会导致语法解析失败。 - 错误的赋值方式:你试图给实例字段
em_y赋值fields.Selection对象,但em_y需要的是具体的选项值,而非字段定义对象。
Odoo中动态更新选择字段的选项,需要在onchange方法中返回包含selection键的字典,同时重置em_y的值以避免无效选项残留。
修正后的代码:
from odoo import models, fields, api class HrEmployee(models.Model): _inherit = ['hr.employee'] em_x = fields.Selection(selection=[('x A', 'x A'), ('x B', 'x B')], string='X') em_y = fields.Selection([], string='Y') @api.onchange('em_x') def onchange_em_x(self): # 重置em_y的值,避免选中无效选项 self.em_y = False if self.em_x == 'x A': return { 'selection': { 'em_y': [('y A', 'y A'), ('y B', 'y B')] } } elif self.em_x == 'x B': return { 'selection': { 'em_y': [('y C', 'y C'), ('y D', 'y D')] } }
代码说明:
- 修正了方法的缩进问题,确保
onchange_em_x方法与装饰器处于同一缩进级别。 - 通过
self.em_y = False重置字段值,防止用户之前选中的选项在新选项列表中不存在而引发错误。 - 使用返回字典中的
selection键,动态更新em_y的可选选项列表,这是Odoo中实现动态选择字段的标准方式。
内容的提问来源于stack exchange,提问作者Zoro
相关产品推荐
相关产品推荐

