odoo12 修行基礎篇之 添加字段 (一)

  本人剛剛接觸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頁中和明細中添加字段時會常常遇到。

  上述的基本方法可以適用大部分的狀況了,後一篇補充下在明細中添加計算字段的狀況。

相關文章
相關標籤/搜索