本人剛剛接觸odoo12,大概有2個多月的時間,這兩天有點時間,就集中寫下博客。瀏覽器
原本是打算整理成筆記,想到這段時間的開發經歷,着實感受網上有關odoo的資料太少,學習資料也很少,既然與odoo有緣,想系統的整理下這段時間的心得體會,與有緣人分享,也算是響應了IT行業的宗旨了。學習
廢話少說,展開正題:ui
odoo基礎教程,好比odoo12的:https://alanhou.org/odoo-12-development/spa
這個系列教程對我影響很大,在此,對大神Alan Hou表示衷心感謝!debug
我主要是想經過簡單的例子,對一些odoo開發中經常使用的技術進行說明:3d
第一篇要說的是添加字段:這也是我接觸odoo12最開始的工做。code
準備工做:orm
運行odoo,安裝銷售、採購、聯繫人三個模塊,用於演示添加字段。xml
在視圖中添加字段:blog
以上是原銷售訂單form頁面,我想在``客戶``字段下增長``銷售員``字段(從聯繫人直接關聯)(sale.order是有的,用於演示)。
# -*- coding:utf-8 -*-
"""銷售模塊擴展"""
from odoo import fields, models # 銷售模塊擴展 class SaleOrderExtension(models.Model): """銷售模塊擴展""" _inherit = 'sale.order'
# 銷售員 x_salesman = fields.Many2one( 'res.users', string='銷售員', related='partner_id.user_id' )
在models目錄中建立sale_order_extension.py文件
在models/__init__.py文件中引用該文件
related能夠經過當前類的某個關聯字段,關聯到該字段所關聯模型中的其它字段。
好比上述就是經過sale.order模型中的partner_id字段,關聯到res.partner中的user_id字段
注意的是:x_salesman的關聯模型是res.users,與user_id的字段屬性是一致的,不然會報以下錯誤:
/home/sam/odoo12/odoo/odoo/fields.py(2139)convert_to_cache() raise ValueError("Wrong value for %s: %r" % (self, value))
就是由於我把res.users搞成了res.partner
x_salesman = fields.Many2one( 'res.partner', string='銷售員', related='partner_id.user_id' )
還有可能遇到這樣的錯誤:
TypeError: Model 'sale.order' does not exist in registry.
這是因爲在__manifest__.py文件中的'depends'中沒有引入對應模塊致使的:
'depends': ['base',],
修改以下:
'depends': ['base', 'sale',],
這個'sale'索引用的是目錄名,由於添加字段所繼承的sale.order模型就在sale目錄下:
/ home / sam / odoo12 / odoo / addons / sale / models / sale.py
在views目錄中建立sale_order_extension.xml文件,代碼以下:
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_order_form_modify" model="ir.ui.view">
<field name="name">view.order.form.modify</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<!-- 增長``銷售員``字段 -->
<xpath expr="//group/group/field[@name='partner_id']" position="after"
>
<field name="x_salesman" />
</xpath>
</field>
</record>
</odoo>
對於xml文件的修改,可能報以下錯誤:
元素 '<xpath expr="//group/div/field[@name='partner_id']">' 在母級視圖中沒有找到
注意我把group修改爲了div,這屬於xpath寫錯了
還有可能也報相似的問題,可是問題緣由並非xpath,而是繼承的視圖的外部ID不對
如我把外部ID修改爲以下,也會報相似錯誤:
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
元素 '<xpath expr="//group/group/field[@name='partner_id']">' 在母級視圖中沒有找到
關於找外部ID的方法,有幾個技巧能夠分享給你們:
找form、tree、kanban等odoo自帶類型,可使用以下方式:
開啓開發者模式,點擊右上角的debug圖標
選擇下拉菜單中的相關項,具體可本身試驗
能夠在彈出的頁面中找到外部ID
找按鈕的外部ID,可使用以下方式:
打開谷歌瀏覽器:
右鍵點擊一個按鈕,選擇檢查
紅框圈出的就是這個按鈕對應的外部ID,這個在添加按鈕權限時,很是好用。
能夠看看字段添加後的效果,不可編輯,若是在聯繫人中修改了銷售員字段,在選擇客戶時會自動帶出,並顯示在頁面中。
在列表中添加字段:
在列表中添加字段:
我想在Quotation Date後面增長建立人,使用系統默認字段create_uid,只添加xml就能夠了
在上述的xml文件中,補充以下代碼:
<record id="view_order_tree_modify" model="ir.ui.view">
<field name="name">view.order.form.modify</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding"/>
<field name="arch" type="xml">
<!-- 增長``建立人``字段 -->
<xpath expr="//field[@name='date_order']" position="after"
>
<field name="create_uid" />
</xpath>
</field>
</record>
其它的odoo自帶的添加字段的方式與上述相同
須要注意的就是外部ID的引用,以及xpath的使用
有時可能會遇到修改無效也不報錯的狀況,頗有多是文中有多個相同字段,你的xpath並無選中你想要修改的字段。
這在TAB頁中和明細中添加字段時會常常遇到。
上述的基本方法可以適用大部分的狀況了,後一篇補充下在明細中添加計算字段的狀況。