odoo 视图继承

odoo 视图继承

表单,列表和搜索视图是使用arch XML结构定义的,要扩展视图,我们需要一种方法来修改这个XML。这意味着需要定位XML中的元素位置,然后在这些位置引入修改。

对于XML,在其中定位元素的最好方法是使用XPath表达式,如果XPath表达式匹配到多个元素,只有第一个元素会被修改。

因此,表达式应该使用独特的属性以使其指定尽可能具体,使用name属性是确保我们找到扩展点的确切xml元素的最简单方法。 因此,在我们的视图XML元素上定义name属性是很重要的。
Xpath表达式的格式:expr=“//标签名[@属性]=‘属性值’” 意思是:找到 属性=属性值 的标签的位置。

下面是一个写在arch中的实现在is_done字段之前添加date_deadline字段的具体例子:

<xpath expr="//field[@name]='is_done'" position="before"> //expr属性值的意思是:找到<filed name="is_done"/>的标签
       <field name="date_deadline" />
</xpath> 

Odoo为此提供了快捷符号,因此大多数时候我们可以完全避免XPath语法。 我们仅使用要定位的元素的特定属性及定位类型相关信息就可以了。

 <field name="is_done" position="before">
      <field name="date_deadline" />
  </field> 

【如果字段在同一视图中多次出现,则应始终使用XPath语法。】

position属性是可选的:

after:将内容添加到父元素之中,匹配的节点之后。
before:添加内容在匹配节点之前。
inside(默认值):匹配节点内的追加内容。
replace:替换匹配的节点。如果使用空内容,它将删除该匹配的元素。
attributes:修改匹配元素的XML属性。在元素内容使用<attribute name =“attr-name”>实现给标签设置新属性值attr-name。
1.如果<attribute></attribute>之间有值,就在匹配的节点上添加以name命名的、以内容主体为值的属性或是修改原同名属性值。
2.如果<attribute></attribute>没有值,就将匹配节点上名字为name的属性删除,如果原节点上没有对应的属性,抛出一个错误。

下面是视图继承的模版写法:
1)扩展表单视图

<record id="view_form_模块名_inherited" model="ir.ui.view">
       <field name="name">模块名_extension</field>
       <field name="model">模型名</field>
       <field name="inherit_id" ref="模块_模型.被继承的form表单id"/>
       <field name="arch" type="xml"> //在arch中进行扩展操作:定位—>插入/修改
           <field name="定位标签name" position="在标签的哪里进行扩展">
               <field ......> //扩展内容
           </field>
       </field>
</record> 

2)扩展列表视图

   <record id="view_tree_模型名_inherited" model="ir.ui.view">
       <field name="name">模型名 extension</field>
       <field name="model">模型</field>
       <field name="inherit_id" ref="被继承的tree视图id"/>
       <field name="arch" type="xml">//在arch中进行扩展
            <field name="定位标签name" position="扩展位置"> 
                <field ....进行扩展 />
            </field>
       </field>
    </record>

3)扩展搜索视图

  <record id="view_filter_模型名_inherited" model="ir.ui.view">
       <field name="name">xxxextension</field>
       <field name="model">模型名</field>
       <field name="inherit_id" ref="被继承的搜索视图id"/>
       <field name="arch" type="xml"> //下面进行定位、扩展举例
           <field name="定位的标签name" position="after">
               //引入的修改,可以是增加过滤field,也可以定义 filter
           </field> 
       </field>
    </record> 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值