在windows cmd命令行下:
e:
cd E:\GOdoo10
E:\GOdoo10\runtime\python\python source\odoo-bin scaffold qingjia myaddons
E:\GOdoo10 是odoo10綠色版的解壓目錄剃袍。
E:\GOdoo10\runtime\python\python 這個(gè)是綠色版自帶的python環(huán)境,source\odoo-bin 是odoo10源碼中的odoo命令入口,scaffold 是odoo的腳手架功能天通,可以創(chuàng)建一個(gè)標(biāo)準(zhǔn)的odoo模塊框架,qingjia是創(chuàng)建的模塊名,myaddons是模塊所放置的目錄路徑搬素。模塊加載目錄有兩個(gè)霎箍,一個(gè)是GOdoo10\myaddons奇钞,另一個(gè)是GOdoo10\source\addons,但是按約定GOdoo10\source\addons放系統(tǒng)模塊漂坏,GOdoo10\myaddons放自己開發(fā)的模塊景埃。
建立完成后,目錄是這樣的顶别,這里是用pycharm進(jìn)行開發(fā)的谷徙,也可以用vs2015進(jìn)行開發(fā)。
以管理員身份登錄系統(tǒng)驯绎,設(shè)置>激活開發(fā)者模式完慧,odoo中很多操作和設(shè)置是需要管理員身份在開發(fā)者模式下才能進(jìn)行的。
應(yīng)用>更新應(yīng)用列表条篷,更新應(yīng)用列表是為了能夠搜索到剛剛添加的qingjia模塊骗随。更新完成后,在搜索欄關(guān)閉“應(yīng)用”標(biāo)簽赴叹,然后輸入qingjia搜索鸿染,能看到我們的模塊了。安裝qingjia模塊乞巧,安裝完成后會(huì)發(fā)現(xiàn)什么也沒(méi)增加涨椒,正常,因?yàn)槟_手架中還沒(méi)有加入任何代碼≌烂剑現(xiàn)在開始加入代碼蚕冬,編輯文件__manifest__.py
# -*- coding: utf-8 -*-
{
'name': "qingjia",
'summary': """
請(qǐng)假模塊""",
'description': """
請(qǐng)假模塊
""",
'author': "leo",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
}
這是整個(gè)模塊的配置文件,配置項(xiàng)從字面上很容易理解是辕。
name:模塊名囤热,會(huì)顯示在模塊列表中。
summary:摘要获三,在模塊詳情顯示旁蔼。
description:描述,在模塊詳情顯示疙教。
depends:模塊依賴項(xiàng)棺聊,在這個(gè)模塊中沒(méi)有需要依賴的其它模塊,保留默認(rèn)的base贞谓。
data:模塊資源文件限佩,視圖、菜單、權(quán)限等都可以寫在資源文件中祟同。
demo:模塊演示數(shù)據(jù)作喘。
修改模塊的類文件 models/models.py
from odoo import models, fields, api
class qingjiadan(models.Model):
_name = 'qingjia.qingjiadan'
name = fields.Char(string="申請(qǐng)人")
days = fields.Integer(string="天數(shù)")
startdate = fields.Date(string="開始日期")
reason = fields.Text(string="請(qǐng)假事由")
這里我們定義了qingjiadan對(duì)象模型,包含四個(gè)屬性耐亏,name徊都,days,startdate广辰,reason暇矫。在模塊安裝完成后,odoo的ORM框架會(huì)自動(dòng)把這個(gè)對(duì)象映射到數(shù)據(jù)庫(kù)表择吊。屬性類型會(huì)映射到表字段數(shù)據(jù)類型李根,表名是模塊名_對(duì)象名
,比如這個(gè)對(duì)象對(duì)應(yīng)的表名是qingjia_qingjiadan
修改資源文件 views/views.xml
<openerp>
<data>
<!-- tree視圖 -->
<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">
<field name="name">請(qǐng)假單列表</field>
<field name="model">qingjia.qingjiadan</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
</tree>
</field>
</record>
<!-- form視圖 -->
<record id="view_form_qingjia_qingjiadan" model="ir.ui.view">
<field name="name">請(qǐng)假單</field>
<field name="model">qingjia.qingjiadan</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="group_top" string="請(qǐng)假單">
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
<field name="reason"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- 視圖動(dòng)作 -->
<act_window id="action_qingjia_qingjiadan"
name="請(qǐng)假單"
res_model="qingjia.qingjiadan"
view_mode="tree,form" />
<!-- 頂級(jí)菜單 -->
<menuitem name="請(qǐng)假" id="menu_qingjia"/>
<!-- 二級(jí)菜單 -->
<menuitem name="請(qǐng)假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
</data>
</openerp>
這里定義了一個(gè)tree視圖几睛,一個(gè)form視圖房轿,一個(gè)視圖動(dòng)作,還有兩個(gè)菜單所森。
tree視圖用于顯示請(qǐng)假單列表頁(yè)面囱持。
<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">
id tree視圖的全局唯一標(biāo)識(shí)
model 資源類型,tree視圖和form視圖都是ir.ui.view
焕济,這里對(duì)應(yīng)ir_ui_view數(shù)據(jù)庫(kù)表纷妆,模塊安裝后,資源數(shù)據(jù)會(huì)寫入對(duì)應(yīng)的數(shù)據(jù)庫(kù)表中晴弃。
<field name="model">qingjia.qingjiadan</field>
將這個(gè)視圖與我們之前定義的對(duì)象模型qingjia.qingjiadan
進(jìn)行綁定掩幢。
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
</tree>
</field>
這里表示這是一個(gè)tree視圖,并定義列表項(xiàng)顯示的列上鞠。在列表項(xiàng)中顯示name,days,startdate三個(gè)字段的內(nèi)容际邻,這里字段都是在qingjia.qingjiadan
對(duì)象模型中定義的。
form視圖用于顯示請(qǐng)假單詳情頁(yè)芍阎,定義方式與tree視圖類似世曾。有兩個(gè)特殊的容器<sheet><group>
是用于頁(yè)面布局的。
<act_window id="action_qingjia_qingjiadan"
name="請(qǐng)假單"
res_model="qingjia.qingjiadan"
view_mode="tree,form" />
這里定義視圖動(dòng)作谴咸,視圖動(dòng)作將菜單度硝、視圖、模型進(jìn)行關(guān)聯(lián)寿冕。
name 會(huì)在模塊的導(dǎo)航條中顯示
res_model 視圖動(dòng)作綁定的模型
view_mode 視圖動(dòng)作關(guān)聯(lián)的視圖類型
<!-- 頂級(jí)菜單 -->
<menuitem name="請(qǐng)假" id="menu_qingjia"/>
<!-- 二級(jí)菜單 -->
<menuitem name="請(qǐng)假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
這里定義了兩級(jí)菜單,頂級(jí)菜單將出現(xiàn)在odoo導(dǎo)航菜單上椒袍,二級(jí)菜單的通過(guò)parent
屬性與頂級(jí)菜單關(guān)聯(lián)驼唱,action
是菜單點(diǎn)擊動(dòng)作響應(yīng)方法。
修改完代碼后驹暑,重啟odoo服務(wù)玫恳,重新登錄系統(tǒng)辨赐,在應(yīng)用>應(yīng)用中再次找到我們之前安裝過(guò)的qingjia模塊,進(jìn)入模塊詳情京办,把qingjia模塊升級(jí)掀序。
好了,現(xiàn)在可以看到請(qǐng)假模塊界面惭婿,能實(shí)現(xiàn)基本的增刪改查功能不恭。