在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 這個是綠色版自帶的python環境,source\odoo-bin 是odoo10源碼中的odoo命令入口,scaffold 是odoo的腳手架功能,可以創建一個標準的odoo模塊框架,qingjia是創建的模塊名,myaddons是模塊所放置的目錄路徑。模塊加載目錄有兩個,一個是GOdoo10\myaddons,另一個是GOdoo10\source\addons,但是按約定GOdoo10\source\addons放系統模塊,GOdoo10\myaddons放自己開發的模塊。

請假單目錄結構
建立完成后,目錄是這樣的,這里是用pycharm進行開發的,也可以用vs2015進行開發。

激活開發者模式
以管理員身份登錄系統,設置>激活開發者模式,odoo中很多操作和設置是需要管理員身份在開發者模式下才能進行的。

安裝請假模塊
應用>更新應用列表,更新應用列表是為了能夠搜索到剛剛添加的qingjia模塊。更新完成后,在搜索欄關閉“應用”標簽,然后輸入qingjia搜索,能看到我們的模塊了。安裝qingjia模塊,安裝完成后會發現什么也沒增加,正常,因為腳手架中還沒有加入任何代碼。現在開始加入代碼,編輯文件`__manifest__.py`
~~~
# -*- coding: utf-8 -*-
{
'name': "qingjia",
'summary': """
請假模塊""",
'description': """
請假模塊
""",
'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',
],
}
~~~
這是整個模塊的配置文件,配置項從字面上很容易理解。
name:模塊名,會顯示在模塊列表中。
summary:摘要,在模塊詳情顯示。
description:描述,在模塊詳情顯示。
depends:模塊依賴項,在這個模塊中沒有需要依賴的其它模塊,保留默認的base。
data:模塊資源文件,視圖、菜單、權限等都可以寫在資源文件中。
demo:模塊演示數據。
修改模塊的類文件?`models/models.py`
~~~
from odoo import models, fields, api
class qingjiadan(models.Model):
_name = 'qingjia.qingjiadan'
name = fields.Char(string="申請人")
days = fields.Integer(string="天數")
startdate = fields.Date(string="開始日期")
reason = fields.Text(string="請假事由")
~~~
這里我們定義了qingjiadan對象模型,包含四個屬性,name,days,startdate,reason。在模塊安裝完成后,odoo的ORM框架會自動把這個對象映射到數據庫表。屬性類型會映射到表字段數據類型,表名是`模塊名_對象名`,比如這個對象對應的表名是`qingjia_qingjiadan`
修改資源文件?`views/views.xml`
~~~
<openerp>
<data>
<!-- tree視圖 -->
<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">
<field name="name">請假單列表</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">請假單</field>
<field name="model">qingjia.qingjiadan</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="group_top" string="請假單">
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
<field name="reason"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- 視圖動作 -->
<act_window id="action_qingjia_qingjiadan"
name="請假單"
res_model="qingjia.qingjiadan"
view_mode="tree,form" />
<!-- 頂級菜單 -->
<menuitem name="請假" id="menu_qingjia"/>
<!-- 二級菜單 -->
<menuitem name="請假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
</data>
</openerp>
~~~
這里定義了一個tree視圖,一個form視圖,一個視圖動作,還有兩個菜單。
tree視圖用于顯示請假單列表頁面。
`<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">`
id?tree視圖的全局唯一標識
model?資源類型,tree視圖和form視圖都是`ir.ui.view`,這里對應ir_ui_view數據庫表,模塊安裝后,資源數據會寫入對應的數據庫表中。
`<field name="model">qingjia.qingjiadan</field>`
將這個視圖與我們之前定義的對象模型`qingjia.qingjiadan`進行綁定。
~~~
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
</tree>
</field>
~~~
這里表示這是一個tree視圖,并定義列表項顯示的列。在列表項中顯示name,days,startdate三個字段的內容,這里字段都是在`qingjia.qingjiadan`對象模型中定義的。
form視圖用于顯示請假單詳情頁,定義方式與tree視圖類似。有兩個特殊的容器`<sheet><group>`是用于頁面布局的。
~~~
<act_window id="action_qingjia_qingjiadan"
name="請假單"
res_model="qingjia.qingjiadan"
view_mode="tree,form" />
~~~
這里定義視圖動作,視圖動作將菜單、視圖、模型進行關聯。
name?會在模塊的導航條中顯示
res_model?視圖動作綁定的模型
view_mode?視圖動作關聯的視圖類型
~~~
<!-- 頂級菜單 -->
<menuitem name="請假" id="menu_qingjia"/>
<!-- 二級菜單 -->
<menuitem name="請假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
~~~
這里定義了兩級菜單,頂級菜單將出現在odoo導航菜單上,二級菜單的通過`parent`屬性與頂級菜單關聯,`action`是菜單點擊動作響應方法。

模塊升級
修改完代碼后,重啟odoo服務,重新登錄系統,在應用>應用中再次找到我們之前安裝過的qingjia模塊,進入模塊詳情,把qingjia模塊升級。

請假單tree視圖

請假單form視圖
好了,現在可以看到請假模塊界面,能實現基本的增刪改查功能。