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

Odoo 16库存模块树形视图:如何按条件隐藏列?

Odoo 16 库存模块树形视图按操作类型条件隐藏列的实现方案

自定义Odoo 16库存模块时,不同操作类型对应不同字段,表单视图已实现对应显示效果,但树形视图无法按条件隐藏列。以下是已尝试的代码示例(修正了原代码的语法错误):

已尝试的代码示例

示例1

<field name="project_name" attrs="{'column_invisible': [('picking_type_code', '!=', 'incoming')]}"/>

(原代码存在引号与闭合标签不匹配问题,已修正)

示例2

<field name='project_name' invisible="context.get('project_name',False)"/>

(原代码存在引号不匹配、projet_name拼写错误问题,已修正)

示例3

<field name="project_name" attrs="{'invisible': [('project_name', '=', False)]}"/>

(原代码缺少闭合大括号与引号,已修正)

示例4

<field name="project_name" invisible="context.get('picking_type_code') != 'incoming'"/>

(原代码存在引号缺失问题,已修正)

可行实现方案

针对Odoo树形视图的列条件隐藏,以下是几种可靠实现思路:

方案1:基于记录字段值动态隐藏(推荐)

树形视图中,column_invisible是控制列显示的专属属性,但需要确保用于判断的字段(picking_type_code)已被视图加载(即使隐藏),否则条件判断失效。

<tree>
    <!-- 隐藏加载判断字段,不显示但用于条件逻辑 -->
    <field name="picking_type_code" invisible="1"/>
    <!-- 根据操作类型控制project_name列的显示 -->
    <field name="project_name" attrs="{'column_invisible': [('picking_type_code', '!=', 'incoming')]}"/>
    <!-- 其他业务字段... -->
</tree>

方案2:基于上下文动态隐藏

如果需要从菜单或动作入口传递参数控制列显示,可通过上下文结合invisible属性实现:

<tree>
    <field name="project_name" invisible="context.get('picking_type_code') != 'incoming'"/>
    <!-- 其他业务字段... -->
</tree>

同时在对应的菜单/动作中传递上下文参数:

<act_window
    name="入库操作列表"
    res_model="stock.picking"
    view_mode="tree,form"
    context="{'picking_type_code': 'incoming'}"/>

方案3:为不同操作类型单独定义树形视图

若不同操作类型的字段差异较大,可继承原视图,为特定操作类型定制专属树形视图:

<record id="view_stock_picking_tree_incoming" model="ir.ui.view">
    <field name="name">stock.picking.tree.incoming</field>
    <field name="model">stock.picking</field>
    <field name="inherit_id" ref="stock.view_picking_tree"/>
    <field name="groups_id" eval="[(4, ref('stock.group_stock_user'))]"/>
    <field name="arch" type="xml">
        <!-- 显示入库专属字段 -->
        <field name="project_name" position="attributes">
            <attribute name="column_invisible">0</attribute>
        </field>
        <!-- 隐藏入库无关字段 -->
        <field name="other_non_incoming_field" position="attributes">
            <attribute name="column_invisible">1</attribute>
        </field>
    </field>
</record>

然后在对应操作类型的动作中指定该视图:

<act_window
    name="入库操作列表"
    res_model="stock.picking"
    view_mode="tree,form"
    view_id="view_stock_picking_tree_incoming"
    domain="[('picking_type_code', '=', 'incoming')]"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:12:54