Odoo 17如何移除销售订单行的product_uom列?自定义视图无效
问题原因与解决方案
核心问题
你当前代码的主要错误是在同一个tree视图中重复定义了product_uom字段,这属于无效的XML结构,Odoo无法正确解析你的隐藏设置,导致该列始终显示。同时,你错误地使用replace替换成两个相同字段,而非直接修改原字段的属性。
修正步骤
- 移除重复字段:tree视图中不能存在同名字段,合并所有需要的属性到单个
product_uom字段中。 - 优先使用属性修改:用
position="attributes"直接修改原字段的显示属性,比替换字段更可靠。 - 确保视图优先级:设置
sequence字段,让你的继承视图在其他相关视图之后加载,避免被覆盖。 - 清理缓存:更新Odoo视图缓存,重启服务或在后台「设置->技术->用户界面->视图」中找到该视图并点击「应用」。
修正后的代码示例
<record id="view_sale_order_form_inherit_napsis_sales" model="ir.ui.view"> <field name="name">sale.order.form.inherit.napsis.sale</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form"/> <!-- 设置sequence确保该视图在其他继承视图之后加载,优先级更高 --> <field name="sequence" eval="20"/> <field name="arch" type="xml"> <!-- 定位到原product_uom字段,修改其属性 --> <xpath expr="//field[@name='order_line']/tree/field[@name='product_uom']" position="attributes"> <!-- 隐藏表格列 --> <attribute name="column_invisible">True</attribute> <!-- 完全隐藏字段渲染 --> <attribute name="invisible">True</attribute> <!-- 保留必要的功能属性 --> <attribute name="readonly">product_uom_readonly</attribute> <attribute name="required">not display_type</attribute> <attribute name="force_save">1</attribute> <!-- 若需按组控制,可添加groups属性,例如仅非UOM组隐藏:groups="!uom.group_uom" --> </xpath> </field> </record>
额外排查点
- 检查是否有其他自定义模块或官方模块(如UOM模块)的视图继承也修改了
product_uom字段,若有需调整视图优先级。 - 确认
product_uom字段在sale.order.line模型中是否为必填项,必填字段不能直接删除,必须保留字段并设置force_save="1"确保数据正常保存。
内容的提问来源于stack exchange,提问作者Arthur Fortin
相关产品推荐
相关产品推荐

