今天我們來示範透過繼承Model來新增Field和更改Views裡面的屬性,用這種方法可以省去自己建立一個Module,並且可以直接使用內部方法。
我們以增加一個欄位,在company底下增加預算欄位
增加 /models/res_company.py
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class Company(models.Model):
_inherit = 'res.company'
budget = fields.Monetary(string="Budget")
我們只要繼承res.company
,並且增加想要的欄位即可,欄位會增加在res_company的表裡面,記住不要設定model name否則會新增另一張表。
匯入剛剛寫的model在/models/init.py
from . import res_company
新增檔案 /views/res_company_views.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_company_form_inherit_gary" model="ir.ui.view">
<field name="name">res.company.form.inherit.gary</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form" />
<field name="arch" type="xml">
<xpath expr="//notebook/page/group/group/field[@name='website']" position="after">
<field name="budget"/>
</xpath>
<xpath expr="//notebook/page/group/group/field[@name='vat']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>
</odoo>
我們透過xpath去尋找website field位置,並用 after
就會把插入的field放在website之後,除此之外,下面也寫一個用attributes
的範例,可以修改特定的field屬性,其他還有before
、replace
用法。
將views加入__manifest__.py裡
'data': [
'views/res_company_views.xml',
...
]
重啟後並更新模組後,我們就可以看到新增欄位,vat欄位也消失不見了。
今天介紹就到這裡,只要參照這個流程就能輕易的擴增想要的Model。