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