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

Odoo 17中为account.move创建多继承视图并自动适配文档类型

在Odoo 17中为不同场景定制Account Move表单视图

核心实现逻辑

利用Odoo视图的domain匹配机制,针对account.move的不同move_type值(out_invoice对应客户发票、in_invoice对应供应商账单、entry对应日记账分录),创建继承基础表单视图的专属视图。系统会根据当前记录的文档类型,自动加载匹配的视图。

具体操作步骤

1. 创建专属继承视图

在模块的views目录下新建XML文件(例如account_move_custom_views.xml),为每种场景编写视图定义:

客户发票专属视图

<record id="view_account_move_out_invoice_form" model="ir.ui.view">
    <field name="name">account.move.out.invoice.form</field>
    <field name="model">account.move</field>
    <field name="inherit_id" ref="account.view_move_form"/>
    <field name="domain">[('move_type', '=', 'out_invoice')]</field>
    <field name="arch" type="xml">
        <!-- 客户发票专属修改:添加关联销售订单字段,隐藏采购订单字段 -->
        <xpath expr="//field[@name='partner_id']" position="after">
            <field name="sale_order_ids" string="关联销售订单" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
        </xpath>
        <field name="purchase_order_ids" position="attributes">
            <attribute name="invisible">1</attribute>
        </field>
    </field>
</record>

供应商账单专属视图

<record id="view_account_move_in_invoice_form" model="ir.ui.view">
    <field name="name">account.move.in.invoice.form</field>
    <field name="model">account.move</field>
    <field name="inherit_id" ref="account.view_move_form"/>
    <field name="domain">[('move_type', '=', 'in_invoice')]</field>
    <field name="arch" type="xml">
        <!-- 供应商账单专属修改:添加关联采购订单字段,隐藏销售订单字段 -->
        <xpath expr="//field[@name='partner_id']" position="after">
            <field name="purchase_order_ids" string="关联采购订单" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
        </xpath>
        <field name="sale_order_ids" position="attributes">
            <attribute name="invisible">1</attribute>
        </field>
    </field>
</record>

日记账分录专属视图

<record id="view_account_move_entry_form" model="ir.ui.view">
    <field name="name">account.move.entry.form</field>
    <field name="model">account.move</field>
    <field name="inherit_id" ref="account.view_move_form"/>
    <field name="domain">[('move_type', '=', 'entry')]</field>
    <field name="arch" type="xml">
        <!-- 日记账分录专属修改:前置日记账字段,隐藏客户/供应商字段 -->
        <xpath expr="//field[@name='line_ids']" position="before">
            <field name="journal_id" attrs="{'readonly': [('state', '!=', 'draft')]}" required="1"/>
        </xpath>
        <field name="partner_id" position="attributes">
            <attribute name="invisible">1</attribute>
        </field>
    </field>
</record>

2. 注册视图到模块

在模块的__manifest__.py文件中,将新建的XML文件添加到data列表:

'data': [
    # 其他已有的视图文件
    'views/account_move_custom_views.xml',
],

3. 关键注意事项

  • domain是视图匹配的核心:Odoo会自动匹配当前记录move_type对应的视图
  • 继承基础视图:通过inherit_id复用account.view_move_form的结构,仅修改差异部分,减少冗余代码
  • 优先级调整:如果多个视图匹配同一domain,可通过priority字段设置优先级(默认值16,数值越大优先级越高)

验证方式

升级模块后分别测试三种场景:

  • 打开客户发票,确认关联销售订单字段显示、采购订单字段隐藏
  • 打开供应商账单,确认关联采购订单字段显示、销售订单字段隐藏
  • 打开日记账分录,确认日记账字段前置显示、客户/供应商字段隐藏

内容的提问来源于stack exchange,提问作者Nabeel Hussain Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:52:34