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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:05:19