odoo16 創(chuàng)建第一個(gè)應(yīng)用插件

重寫(xiě)一遍的原因是視頻太模糊了,看不清,也不好復(fù)制代碼;
本章節(jié)我們將向大家介紹如何用odoo16創(chuàng)建第一個(gè)插件。
在此之前,你可以了解擴(kuò)展的知識(shí):
E-R圖
正則表達(dá)式
MVC模式
繼承
odoo字段類(lèi)型詳解
步驟一:數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
在經(jīng)過(guò)需求分析→詳細(xì)設(shè)計(jì)后,我們得到如下E-R圖。

步驟二:插件生成
odoo生成一個(gè)可以安裝的插件只需要一個(gè)__manifest__.py文件。
在odoo 16中,__manifest__.py文件是用于描述應(yīng)用程序的元數(shù)據(jù)和配置信息的文件。以下是__manifest__.py文件中一些常用參數(shù)的說(shuō)明,所有的參數(shù)寫(xiě)成一個(gè)字典:
name:??應(yīng)用程序的名稱(chēng)。
summary: 應(yīng)用程序的簡(jiǎn)短描述,通常用于應(yīng)用商店的列表頁(yè)面。
description: 應(yīng)用程序的描述信息,用于在應(yīng)用商店或其他地方展示。
version: 應(yīng)用程序的版本號(hào)。
category:應(yīng)用程序的分類(lèi)。
website: 應(yīng)用程序的官方網(wǎng)站。
author: 應(yīng)用程序的開(kāi)發(fā)者或發(fā)布者名稱(chēng)。
company:應(yīng)用程序的公司。
depends: 指定應(yīng)用程序依賴(lài)的odoo模塊列表。
license: 應(yīng)用程序的許可證信息,如GPLv3等。
application:是否為應(yīng)用程序,如銷(xiāo)售是應(yīng)用程序,銷(xiāo)售報(bào)表則不是。
installable: 是否可以作為odoo模塊安裝。通常為T(mén)rue。
auto_install:是否自動(dòng)安裝,例如銷(xiāo)售報(bào)表依賴(lài)銷(xiāo)售,則可以設(shè)置為如果銷(xiāo)售安裝后,銷(xiāo)售報(bào)表自動(dòng)安裝。
這些參數(shù)可以根據(jù)具體需求進(jìn)行配置和修改,以滿足應(yīng)用程序的需求和特性。

odoo.conf配置文件我們改兩個(gè)地方,addons_path和dbfilter
addons_path:我們新增的插件放到ilearning目錄下,因此將ilearning目錄添加在addons_path中,以逗號(hào)隔開(kāi);addons_path以odoo-bin所在的目錄為參考目錄,因此ilearning的相對(duì)路徑為odoo\ilearning;
dbfilter:是根據(jù)正則表達(dá)式匹配要顯示的數(shù)據(jù)庫(kù),比如student_sys可以匹配student_sys開(kāi)頭的數(shù)據(jù)庫(kù),比如student_sys123,student_sys__等;

運(yùn)行odoo16,創(chuàng)建一個(gè)應(yīng)用,注意:配置了dbfilter,所以數(shù)據(jù)庫(kù)一定要以student_sys開(kāi)頭,我們就直接用student_sys。


這樣,我們就能看到ilearning下面的jcerp_student_01插件了,只是我們其他插件是寫(xiě)好了的,所以也一并都能夠看到。
步驟三:后端模型
后端模型是寫(xiě)在.py文件中的,將后端模型代碼放在models中,并通過(guò)__init__.py引用models,models中的__init__.py再引用其目錄下的.py模型文件,這是一種編程規(guī)范,符合MVC模式,早期odoo的.py文件直接放在插件根目錄下,從功能上來(lái)說(shuō)也不影響。



按照步驟一我們?cè)O(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),我們繼承了models.Model,代碼如下:
odoo的字段類(lèi)型可以參考:odoo字段類(lèi)型詳解
class_archives.py
course_archives.py
grade_archives.py
student_archives.py
步驟四:權(quán)限控制
權(quán)限文件是放在security的ir.model.access.csv文件中,另外還有security.xml以后再講。
寫(xiě)法也簡(jiǎn)單
id:access_模型(_連接)_權(quán)限組,例如學(xué)生用戶權(quán)限,access_student_archives_group_user或者access_student_archives_user;
name:可以用模型(.連接),例如學(xué)生用戶權(quán)限,student.archives
model_id:必須是:model_模型(_連接),model_student_archives
group_id:群組,這里我們只需要知道基本用戶組是base.group_user
rwcu:讀寫(xiě)增刪權(quán)限
整體的意思就是群組base.group_user對(duì)學(xué)生具備可讀可寫(xiě)可創(chuàng)建可刪除的權(quán)限,那么如果某個(gè)用戶賦予了這個(gè)群組,那么這個(gè)用戶就具備了可讀可寫(xiě)可創(chuàng)建可刪除的權(quán)限。
步驟五:前端視圖
注意:要把所有的視圖文件、權(quán)限文件都在__manifest__.py的data中引用?。?!

以student_archives_views.xml為例:
菜單視圖:從代碼來(lái)看,比較明了,就是定義了一個(gè)學(xué)生管理系統(tǒng),并且在其下又定義了4個(gè)子菜單,父子菜單通過(guò)parent來(lái)關(guān)聯(lián),頂級(jí)菜單沒(méi)有parent;
name:菜單名稱(chēng)
id:菜單的id,整個(gè)系統(tǒng)必須唯一,一般以menu_開(kāi)始命名;
web_icon:頂級(jí)菜單的圖標(biāo);
sequence:平級(jí)菜單的顯示順序;
action:點(diǎn)擊菜單觸發(fā)的動(dòng)作,頂級(jí)菜單也可以指定動(dòng)作,如果不指定,則默認(rèn)顯示第一個(gè)具有action的子菜單對(duì)應(yīng)的動(dòng)作。如果某一級(jí)菜單下所有的子菜單都沒(méi)有action,則該菜單不顯示。
action視圖:
也稱(chēng)動(dòng)作視圖,是點(diǎn)擊菜單后執(zhí)行的動(dòng)作,動(dòng)作的效果是根據(jù)action的定義顯示對(duì)應(yīng)的視圖。
id:整個(gè)系統(tǒng)必須唯一,以action_開(kāi)頭,對(duì)應(yīng)的模型是ir.actions.act_window
name:進(jìn)入界面后,界面顯示的名稱(chēng);
view_mode:該action視圖對(duì)應(yīng)有哪些視圖,字段較多一般會(huì)選擇tree及form視圖,字段較少時(shí)只選擇tree視圖即可;一般這些視圖都需要我們?nèi)ザx,如果不定義,odoo會(huì)根據(jù)后端模型自動(dòng)生成視圖。
view視圖:
一般來(lái)說(shuō),我們會(huì)定義action中view_mode中的視圖與搜索視圖;
tree視圖:
id:整個(gè)系統(tǒng)必須唯一,一般以view_xx_tree命名,對(duì)應(yīng)的model是ir.ui.view
name:tree視圖的名稱(chēng)
model:這里的model一定要與后端模型保持一致
arch:tree視圖的內(nèi)容,按照tree>field
form視圖:
id:整個(gè)系統(tǒng)必須唯一,一般以view_xx__form命名,對(duì)應(yīng)的model是ir.ui.view
name:form視圖的名稱(chēng)
model:這里的model一定要與后端模型保持一致
arch:form視圖的內(nèi)容,form>sheet>group>group>field層級(jí),可以自行去掉某一層級(jí)觀察效果
search視圖:
id:整個(gè)系統(tǒng)必須唯一,一般以view_xx__search命名,對(duì)應(yīng)的model是ir.ui.view
name:search視圖的名稱(chēng)
model:這里的model一定要與后端模型保持一致
arch:search視圖中的條件字段,可以是后端模型中的char、selection、對(duì)象;
class_archives_views.xml
course_archives_views.xml
grade_archives_views.xml
運(yùn)行效果
