odoo檢視繼承
簡介繼承
- 在odoo裡可以通過繼承的方式來改寫已經存在的view
- 對比view的定義檢視定義中寫法多了inherit_id
-
inherit_id指向要改寫的view
<field name="inherit_id" ref="id_category_list"/>
在arch裡用xpath定位改寫的元素
<!-- 改寫 ibuilding list 列表檢視 --> <record id="building_list_view" model="ir.ui.view"> <field name="name">building.list.view</field> <field name="model">ibuilding.list</field> <field name="inherit_id" ref="building_list"/> <field name="arch" type="xml"> <!-- 找到ids欄位,在其後新增idea_id欄位 --> <xpath expr="//field[@name='ids']" position="after"> <field name="idea_id" string="Number of ideas"/> </xpath> <!-- 找到 upload 欄位,在其後新增idea_ids欄位 --> <xpath expr="//field[@name='upload']" position="replace"> <field name="download" string="下載一個檔案"/> </xpath> </field> </record>
- 注意找到的元素必須是一個,如果定位出多個元素或者是空,都會報錯。
- expr Xpath表示式用來選擇父檢視中的某個元素,如果沒找到或找到多個元素會丟擲一個異常
position定位有如下選擇
- inside在內部結尾插入元素
- replace替換元素
- before在之前插入元素
- after在其後插入元素
- attributes修改xml的屬性
當僅匹配一個field時,erpr表示式可以簡化如下
<xpath expr="//field[@name='upload']" position="replace"> <field name="download" /> </xpath> <field name="upload" position="replace"> <field name="download" /> </field>