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

Odoo 17如何移除销售订单行的product_uom列?自定义视图无效

问题原因与解决方案

核心问题

你当前代码的主要错误是在同一个tree视图中重复定义了product_uom字段,这属于无效的XML结构,Odoo无法正确解析你的隐藏设置,导致该列始终显示。同时,你错误地使用replace替换成两个相同字段,而非直接修改原字段的属性。

修正步骤

  1. 移除重复字段:tree视图中不能存在同名字段,合并所有需要的属性到单个product_uom字段中。
  2. 优先使用属性修改:用position="attributes"直接修改原字段的显示属性,比替换字段更可靠。
  3. 确保视图优先级:设置sequence字段,让你的继承视图在其他相关视图之后加载,避免被覆盖。
  4. 清理缓存:更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:00:02