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