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
相关产品推荐
相关产品推荐

