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

无需onchange函数为Many2one字段设置动态域问题求助

问题分析与解决方案

原代码无法正常运行的核心原因是:直接将实例方法赋值给domain参数时,该方法会在模型定义阶段一次性执行,而非针对每条记录的is_bus_registered实时值动态计算,因此无法实现随布尔字段切换而更新域的效果。此外,手动执行search获取ID列表的方式属于冗余操作,Odoo的域本身支持直接使用数据库查询条件,无需提前查询。

修正后的代码

is_bus_registered = fields.Boolean(
    string='Bus Registered',
    required=False
)

att_policy_id = fields.Many2one(
    'hr.attendance.policy', 
    string='Attendance Policy', 
    domain=lambda self: [('is_bus_registered', '=', self.is_bus_registered)]
)

关键说明

  • 使用lambda函数作为domain参数,Odoo会针对每条记录实时计算域条件,自动根据当前记录的is_bus_registered值,过滤出对应匹配的hr.attendance.policy选项。
  • 直接在域中使用字段匹配条件,替代原代码中先查询再取ID的逻辑,既减少数据库查询次数,又符合Odoo的域设计规范。
  • 该方案无需依赖onchange函数,表单中切换布尔字段状态时,Many2one字段的可选列表会自动更新。

内容的提问来源于stack exchange,提问作者omar ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:12