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

Odoo 16中One2many树形视图行按字段值着色问题求助

Odoo 16 One2many树形视图行背景色根据字段值设置解决方案

针对你遇到的问题,以下是两种经过验证的适配Odoo 16的解决方案:

方法一:使用视图row_class属性(推荐)

Odoo 16支持在树形视图的<tree>标签中直接配置row_class属性,通过表达式绑定条件样式,无需复杂JS开发。

  1. 修改视图XML配置
    在你的One2many字段对应的树形视图定义中,添加row_class属性,并确保is_line_nonsense字段被包含(即使设为不可见):

    <field name="your_one2many_field_name">
        <tree editable="bottom" row_class="o-red-highlight-row: is_line_nonsense">
            <field name="is_line_nonsense" invisible="1"/>
            <!-- 其他业务字段 -->
        </tree>
    </field>
    

    语法说明:row_class的值为CSS类名: 条件表达式,多个条件用逗号分隔。这里直接用is_line_nonsense作为条件,因为它是布尔字段,值为True时自动匹配。

  2. 添加自定义CSS样式
    在模块的static/src/css目录下创建list_row_styles.css文件,写入样式:

    .o-red-highlight-row {
        background-color: #ff4d4d !important;
        color: white !important; /* 可选:调整文字颜色提升可读性 */
    }
    

    然后在模块的__manifest__.py中注册这个CSS资源:

    'assets': {
        'web.assets_backend': [
            'your_module_name/static/src/css/list_row_styles.css',
        ],
    },
    

方法二:通过JS扩展ListRenderer

如果方法一不生效(比如特殊视图场景),可以通过正确的JS继承方式扩展ListRenderer,修复你之前的无效问题。

  1. 编写JS扩展文件
    在模块的static/src/js目录下创建list_renderer_patch.js:

    import ListRenderer from 'web.ListRenderer';
    import patch from 'web.patch';
    
    patch(ListRenderer.prototype, 'your_module_name.ListRendererPatch', {
        _renderRow(record) {
            // 调用父类方法渲染行
            const $row = this._super(...arguments);
            // 检查字段值,注意确保字段已被视图加载
            if (record.data.is_line_nonsense) {
                $row.addClass('o-red-highlight-row');
            }
            return $row;
        },
    });
    

    注意:Odoo 16中推荐使用web.patch来扩展现有组件原型,而非旧的继承方式。

  2. 注册JS和CSS资源
    在__manifest__.py中同时引入JS和CSS文件:

    'assets': {
        'web.assets_backend': [
            'your_module_name/static/src/js/list_renderer_patch.js',
            'your_module_name/static/src/css/list_row_styles.css',
        ],
    },
    

关键注意事项

  • 必须确保is_line_nonsense字段被包含在树形视图的字段列表中,即使设置invisible="1"也可以,否则JS或视图表达式无法获取到该字段的值。
  • 完成配置后,在开发者模式下升级模块,并清除浏览器缓存(Ctrl+Shift+R强制刷新),确保新资源加载生效。
  • 如果使用自定义模块,确认模块已安装并启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:29:58