iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Software Development

Let's ODOO 開發與應用30天挑戰系列 第 22

Day22 Let's ODOO: 繼承Model來增加欄位

今天我們來示範透過繼承Model來新增Field和更改Views裡面的屬性,用這種方法可以省去自己建立一個Module,並且可以直接使用內部方法。

我們以增加一個欄位,在company底下增加預算欄位

  1. 增加 /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否則會新增另一張表。

  2. 匯入剛剛寫的model在/models/init.py

    from . import res_company
    
  3. 新增檔案 /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屬性,其他還有beforereplace 用法。

  4. 將views加入__manifest__.py裡

    'data': [
    	'views/res_company_views.xml',
    	...
    ]
    

重啟後並更新模組後,我們就可以看到新增欄位,vat欄位也消失不見了。

https://ithelp.ithome.com.tw/upload/images/20211007/20130896Fn9n8GzULk.png
今天介紹就到這裡,只要參照這個流程就能輕易的擴增想要的Model。


上一篇
Day21 Let's ODOO: 流水號
下一篇
Day23 Let's ODOO: Currency
系列文
Let's ODOO 開發與應用30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言