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

Odoo中Invalid leaf错误排查:多对多字段过滤异常

解决Odoo Many2many字段筛选触发的Invalid leaf ValueError

刚看到你遇到的这个问题,我之前在配置Odoo关联字段筛选时也踩过类似的坑。你定义的Many2many字段加了domain来过滤未停用的分析配置,但系统抛出了ValueError: Invalid leaf,大概率是domain的语法或者字段匹配出了问题,咱们一步步来解决:

错误原因分析

Odoo在解析domain表达式时,会把每个筛选条件(也就是所谓的"leaf")拆成三元组(字段名, 操作符, 值)处理。如果这个三元组格式不对、字段名不存在,或者有多余的无效字符,就会触发这个错误。看你给出的domain[('Deactivated', '=',False )],至少有两个可能的问题:

  • False后面多了一个多余空格,导致解析时识别出错
  • 关联模型olims.analysis_profile里的字段名可能不是Deactivated(Odoo模型字段通常用小写下划线命名,比如deactivated)

具体解决方案

1. 修正Domain的语法格式

先把domain里多余的空格去掉,保证每个元素的分隔清晰,正确的字符串形式domain应该是这样:

fields.Many2many(
    string='AnalysisProfile',
    comodel_name='olims.analysis_profile',
    relation='ar_to_analysisprofile',
    domain="[('Deactivated', '=', False)]"
)

注意False前后的空格要规范,逗号后面跟一个空格,不要有多余的末尾空格。

2. 确认关联模型的字段名

去检查olims.analysis_profile模型的定义,看看布尔字段的名字到底是Deactivated还是小写的deactivated。如果模型里定义的是:

deactivated = fields.Boolean(string='Deactivated')

那你得把domain里的字段名改成小写,否则Odoo找不到对应的字段,自然会报错:

fields.Many2many(
    string='AnalysisProfile',
    comodel_name='olims.analysis_profile',
    relation='ar_to_analysisprofile',
    domain="[('deactivated', '=', False)]"
)

3. 改用Lambda函数定义Domain(可选)

如果字符串形式的domain总是出问题,你可以试试用lambda函数来定义,这样能避免字符串解析的潜在问题,写法如下:

fields.Many2many(
    string='AnalysisProfile',
    comodel_name='olims.analysis_profile',
    relation='ar_to_analysisprofile',
    domain=lambda self: [('Deactivated', '=', False)]
)

这种方式在需要动态筛选的时候也更灵活,不过你的场景是静态筛选,两种方式都能用。

验证修改

改完之后重启Odoo服务,更新模块,再打开对应的视图,应该就能正常加载筛选后的Many2many字段了。

内容的提问来源于stack exchange,提问作者Muhammad Sajid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:16