如何在Odoo中通过Python设置字段Domain?代码失效求助
Python端直接设置Domain的方法及代码问题分析
可以直接在Python端设置字段Domain,无需依赖视图配置,常用@api.onchange方法实现动态Domain逻辑,适合根据当前记录的其他字段值实时调整字段可选范围。
你的代码未生效主要有以下几个原因:
- 触发字段错误:
@api.onchange('partner_id')是在客户字段变化时触发,但你需要根据branch_id(分支机构)的变化来限制客户可选范围,所以触发字段应该是branch_id,而非partner_id。 - 变量赋值逻辑错误:你当前赋值的
cust_list = rec.partner_id.branch_id.id是已选客户的分支机构ID,而非当前记录的分支机构ID,完全搞反了筛选逻辑,应该取当前记录的branch_id.id。 - 循环与return位置错误:
return语句放在for循环内部,会导致第一次循环就直接返回,无法处理所有记录;且单记录场景下(onchange通常处理单条交互记录),可以简化掉循环。 - 未处理分支为空的情况:当
branch_id为空时,cust_list未定义,会引发报错,导致Domain无法正常设置。
修正后的代码示例:
@api.onchange('branch_id') def _onchange_cust_domain(self): # 单记录场景无需循环,直接操作self即可 cust_list = self.branch_id.id if self.branch_id else False return {'domain': {'partner_id': [('branch_id', '=', cust_list)]}}
内容的提问来源于stack exchange,提问作者user20349495
相关产品推荐
相关产品推荐

