轉(zhuǎn)載:https://blog.csdn.net/CBGCampus/article/details/119325442
前言
Odoo的前世今生大家想必或多或少都有了解,知道它是針對 ERP 的應(yīng)用場景而出現(xiàn)的開源免費的純B/S架構(gòu)的系統(tǒng),其所需模塊可由用戶安裝、卸載甚至是快速的定制開發(fā)。對于企業(yè)的ERP需求來說,Odoo可方便快速地進行迭代更新,來是適應(yīng)公司8-10年甚至長遠地發(fā)展,大大降低了ERP系統(tǒng)的開發(fā)和維護成本。
之前講過一篇基于Odoo腳手架工具來搭建第一個自定義模塊的文章,主要講解的是利用Odoo源碼中自帶的Models和Views相關(guān)代碼,實現(xiàn)簡單的tree(列表)和form(表單)之間的跳轉(zhuǎn)功能,并進行簡單的字段編輯、保存與查看等。
話不多說,今天我們來理清Odoo開發(fā)中這對兒最為重要的關(guān)系之一:模型(Models)和視圖(Views)。
該怎樣來總結(jié)和形容這兩者的關(guān)系呢?簡單地說,前者負責(zé)處理邏輯,后者負責(zé)展示視圖;形象地說,Models就像是導(dǎo)演和編劇,而Views就是演員和屏幕。兩者不可分割,各司其職將一個Odoo應(yīng)用中的各種功能準(zhǔn)確無誤地供用戶使用。
一、關(guān)于模型(Models)
對于模型的講解本文將從Python類變量、name屬性、function函數(shù)(修飾器)以及字段屬性來為大家講解。
Model是存儲數(shù)據(jù)記錄的最主要手段,它是持久化地對數(shù)據(jù)記錄(record)進行存儲,直至對其進行刪除。幾乎所有的自定義模塊都會繼承自models.Model,可以存儲數(shù)據(jù)庫中所有開發(fā)所需的數(shù)據(jù)與字段。
1.models.Model
這里的models和Model的含義是不一樣的。前者指的是Odoo的模型對象,也就是我們開發(fā)Odoo時所需要用到的.py文件;后者指的是對于列表、字典、自定義類這些可變變量,如果將其作為類變量,則是傳引用——即所有對象的類變量公用一個內(nèi)存地址。這是Python語言的語法所規(guī)定的,其定義代碼可由圖1-1-1示例:
2.name屬性和description屬性
name屬性是模型中的必填屬性,Odoo里Class的唯一標(biāo)識,并且在整個模型文件的全局不能夠重復(fù)。
description是描述屬性,只在查看模型界面的時候作為展示使用,沒有實際用戶。它可選不填,但好的編碼習(xí)慣我們應(yīng)該書寫盡量詳盡的描述。
3.function函數(shù)(修飾器)
@api.multi:對記錄集進行操作的方法需要添加此修飾器,此時self就是要操作的記錄集。所以方法內(nèi)應(yīng)該對self進行遍歷,例如圖1-3-1所示:
@api.model:模型(model)層面的操作需要添加此修飾器,它不針對特定的記錄,也不保留記錄集,self是對模型的引用。相當(dāng)于類靜態(tài)函數(shù)。例如create方法,widget的調(diào)用方法,如圖1-3-2所示:
4.常見字段屬性
4.1:Char: 單行文本;
4.2:Boolean: 邏輯字段;
4.3:Text: 多行文本,表現(xiàn)為textarea
4.4:True/False Selection: 列表選擇字段,第一個參數(shù)為元組列表,表示可選列表, 如:
GENDER = [ ('male', u'男'), ('female', u'女'), ('other', u'其他') ]
gender = fields.Selection(GENDER, string=u'性別')
4.5:Binary: 二進制字段,通常用于圖片、附件等文件讀寫;
4.6:Integer: 整型字段;
4.7:Float: 浮點型字段,可以指定位數(shù)digits,使用元組(a,b),其中a是總位數(shù),b 是保留小數(shù)位;
4.8:Datetime: 日期對象,精確到秒 Html: 界面展示HTML內(nèi)容,帶有富文本編輯器;
4.9:required: 控制字段是否必填, 會為數(shù)據(jù)庫添加約束NOT NULL,因此對API調(diào)用是生效;
4.10:groups: 控制字段權(quán)限,為字段分權(quán)限組,只有處于該權(quán)限組的用戶可見該字段。
二、關(guān)于視圖(Views)
對于視圖這部分知識點的講解,將從其標(biāo)簽、屬性、XML文件等方面出發(fā),為大家做一些盡可能詳細易懂的介紹。
前面說到了Views是為用戶提供視圖界面的,那么在這里著重詳細介紹一下Odoo開發(fā)中最為常見的一種視圖間的跳轉(zhuǎn)。即具體包括以下5個步驟:
a. 從菜單的下拉框中選中自己開發(fā)的某個子菜單;
b. 并編輯該子菜單需要展示的字段(重點);
c. 將該菜單的內(nèi)容以tree 的形式顯示;
d. 編輯該tree所對應(yīng)的form頁面并顯示(重點);
e. 實現(xiàn)對數(shù)據(jù)的保存與查看。
下面就是每個步驟中會使用到的關(guān)鍵知識點,把這些都整明白的話,那掌握視圖部分開發(fā)的基本流程已無大礙。
1.menuitem標(biāo)簽
這是菜單的專屬標(biāo)簽,所謂菜單,就是一層層的點擊過后,會逐一展示出不同內(nèi)容的頁面基本元素。代碼示例可如圖2-1-1所示:
上圖代碼對應(yīng)在瀏覽器實現(xiàn)的頁面效果可如圖2-1-2所示:
2.parent屬性
這個屬性在視圖與視圖之間的關(guān)聯(lián)中起著非常關(guān)鍵的作用:parent可以作為某一視圖的父屬性,從而關(guān)聯(lián)到另一id名稱為該視圖名稱的另一視圖。并且在安裝了Pycharm Odoo插件后按住Ctrlt同時點擊鼠標(biāo),可以進行直接的跳轉(zhuǎn)。具體用法如圖2-2-1所示:
3.action屬性
action則是一個動作事件的總稱,它的效果是可以定義和執(zhí)行一些需要被使用到的XML文件,同時聲明一些該XML文件的必要屬性:動作id、指定的視圖類型、所要展示的視圖id等,具體可如圖2-3-1所示:
講到這里我們不難發(fā)現(xiàn),Odoo視圖屬性之間的關(guān)聯(lián)性非常的強幾乎就是直接的關(guān)聯(lián)和跳轉(zhuǎn)。于是前端代碼的編寫時間便得到了節(jié)約,正是如此有效率地實現(xiàn)某些必須的的功能,才將Odoo“低代碼”的特性發(fā)揮地淋漓盡致。
4.record標(biāo)簽&field標(biāo)簽
這兩個標(biāo)簽是Odoo視圖開發(fā)中使用最為頻繁的標(biāo)簽。一般使用<record></record>標(biāo)簽來加載視圖中所需的各個字段,其中又以<field></field>標(biāo)簽來聲明字段中所必須的一些屬性信息。兩者都是將Odoo視圖中的關(guān)鍵內(nèi)容進行“包裹”,使其執(zhí)行起來井然有序。具體可參考圖2-4-1:
5.tree&form的區(qū)別
這兩個視圖類型是Odoo開發(fā)中最為常見,關(guān)系也最為緊密。tree這一類型的視圖,顧名思義就是列表,將一個包含許多字段的完整信息以列表的方式展現(xiàn)。具體可如圖2-5-1所示:
在代碼中,tree視圖的定義也非常簡單,申明該視圖唯一標(biāo)識名稱,id以及其它所需字段,最后再聲明該視圖類型為tree,可以快速地在瀏覽器生成對應(yīng)的列表,代碼示例如圖2-5-2:
而form表單,則可以看作是存儲某一條記錄的詳細頁面,一般而言可以在該頁面進行編輯、保存、取消保存以及返回至tree頁面。具體的形式多以下拉選擇框、文本框、按鈕和類選擇器來展現(xiàn),示例可如圖2-5-3:
同樣地,我們來看看在代碼中是如何實現(xiàn)這樣的效果的。field標(biāo)簽依然要被使用到,聲明該表單的名稱,以及一些顯示字段名稱,最重要的是有下拉框的聲明,所需日期類型的以及字段類型等。
三、總結(jié)
Odoo中,一切皆模型,連視圖都是模型。Odoo將各種數(shù)據(jù),如:權(quán)限數(shù)據(jù)、類數(shù)據(jù)、視圖數(shù)據(jù)等,按照模型分表存儲。然后在查看時,按照索引從各個表格讀取信息,組合成我們看到的內(nèi)容每種類型的視圖都代表一種可視化模式,不同的視圖具有不同的功能性。比如 form(稱為表單視圖),它提供表單給用戶創(chuàng)建、編輯記錄數(shù)據(jù);tree (列表視圖),它提供給用戶簡化的、直觀的數(shù)據(jù)數(shù)據(jù)詳情。當(dāng)然,在使用特定的屬性后,列表視圖也可以像表單視圖對數(shù)據(jù)進行創(chuàng)建、編輯等操作,但有一定的局限性。
以上就是對Odoo模型與視圖關(guān)系的講解,不嚴(yán)謹(jǐn)之處還望大家指正。
————————————————
版權(quán)聲明:本文為CSDN博主「神州數(shù)碼云基地」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/CBGCampus/article/details/119325442
聯(lián)系客服