openERP筆記 自定義模塊開發
阿新 • • 發佈:2018-07-05
oom size 創建工程 for 編號 文檔 姓名 use python
##需求描述
- 輸入和查詢課程,把信息儲存到課程對象裏
- 課程包含以下信息:名稱,價格,天數,開始日期,教師,學員
- 每個課程可以有多個學員,要記錄學員的姓名、電話、電子郵件
- 課程可以添加教材和作業等文檔附件
- 用戶可以設置默認值以加速輸入
- 可以按名稱查詢課程,也可以用其他信息查找課程,並保存常用查詢條件
- 可以導出課程信息到excel文件,並支持導入
- 可以按日期查看課程,並調整課程時間
- 老師只能看到自己的課程
##編寫課程模塊
###PyCharm中創建工程
PyCharm中創建一個工程my_training, 存放在OE addons目錄下, 並在該工程中打開OE目錄(見之前的文章).
###文件結構
模塊名命名為”my_training”, 目錄下四個文件, 如下:
|--my_training
|--__init__.py
|--__openerp__.py
|--lesson.py
|--lesson_view.xml
###__init__.py
Python模塊描述文件, 每個OE模塊也是一個Python模塊.
# -*- coding: utf-8 -*-
import lesson
###__openerp__.py
# -*- coding: utf-8 -*- { "name": "My Training", #模塊名 "version": "1.0", #模塊版本 "description": ‘My Training Demo‘, #模塊說明 "author": "Jeff", #作者 "website": "http://www.jeffzhang.cn", #網址 "depends": [], #依賴的模塊 "data": ["lesson_view.xml"], "demo": [], "installable": True, #可否安裝 ‘auto_install‘: False, }
###lesson.py
# -*- coding: utf-8 >-*- from openerp.osv import fields, osv class my_training_lesson(osv.osv): _name = ‘my.training.lesson‘ _discription = u‘培訓課程示例‘ _columns = { ‘name‘: fields.char(u‘課程名‘,size=64, select=True), ‘date_start‘: fields.date(u‘開始日期‘, select=True), ‘total_day‘: fields.float(u‘總天數‘, digits=(16,1)), ‘teacher‘: fields.many2one(‘res.users‘, u‘授課老師‘), ‘students‘: fields.many2many(‘res.partner‘, string=u‘學生‘), ‘price‘: fields.float(u‘價格‘, digits=(16,2)), } my_training_lesson()
###lesson_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--定義表單視圖-->
<record model="ir.ui.view" id="my_training_lesson_form_view">
<field name="name">課程表單</field>
<field name="type">form</field>
<field name="model">my.training.lesson</field>
<field name="arch" type="xml">
<form string="課程表單">
<field name="name"/>
<field name="date_start"/>
<field name="total_day"/>
<field name="price"/>
<field name="teacher"/>
<field name="students" colspan="4"/>
</form>
</field>
</record>
<!--定義列表視圖-->
<record model="ir.ui.view" id="my_training_lesson_tree_view">
<field name="name">課程列表</field>
<field name="type">tree</field>
<field name="model">my.training.lesson</field>
<field name="arch" type="xml">
<tree string="課程列表">
<field name="name"/>
<field name="date_start"/>
<field name="teacher"/>
<field name="price" sum="合計"/>
</tree>
</field>
</record>
<!--定義視圖動作-->
<record model="ir.actions.act_window" id="action_my_training_lesson">
<field name="name">課程</field> <!--這個字符串即課程對應列表或編輯界面的標題-->
<field name="res_model">my.training.lesson</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="my_training_lesson_tree_view"/>
</record>
<!--定義菜單-->
<menuitem id="my_menu" name="培訓示例"/>
<menuitem id="my_training_menu" name="培訓" parent="my_menu"/>
<menuitem id="my_training_lesson_menu" name="培訓課程" parent="my_training_menu" action="action_my_training_lesson"/>
</data>
</openerp>
##通過繼承修改模塊
Custom Module Development第一部分中說明了怎麽擴展一個系統模塊, 這部分擴展剛才編寫的課程模塊.
###PyCharm中創建工程
PyCharm中創建一個工程my_training_classroom, 存放在OE addons目錄下, 並在該工程中打開OE目錄(見之前的文章).
###文件結構
模塊名命名為”my_training_classroom”, 目錄下六個文件, 如下:
|--my_training_classroom
|--__init__.py
|--__openerp__.py
|--lesson.py #繼承my.training.lesson對象的文件
|--classroom.py
|--lesson_view.xml
|--classroom_view.xml
###__init__.py
# -*- coding: utf-8 -*-
import lesson
import classroom
###__openerp__.py
# -*- coding: utf-8 -*-
{
"name": "My Training Classroom", #模塊名
"version": "1.0", #模塊版本
"description": ‘My Training Demo -- ClassRoom‘, #模塊說明
"author": "Jeff", #作者
"website": "http://www.jeffzhang.cn", #網址
"depends": ["my_training"], #依賴的模塊
"data": [
"lesson_view.xml", # 需要繼承的視圖
"classroom_view.xml",], # 模塊更新時讀入的文件
"demo": [],
"installable": True, #可否安裝
‘auto_install‘: False,
}
###classroom.py
from openerp.osv import fields, osv
class my_training_classroom(osv.osv):
_name = ‘my.training.classroom‘
_discription = u‘教室‘
_columns = {
‘number‘: fields.char(u‘編號‘, size=64, select=True),
‘capacity‘: fields.integer(u‘容納人數‘, select=True),
‘location‘: fields.char(u‘地點‘, size=125, select=True),
}
my_training_classroom()
###lesson.py
from openerp.osv import fields, osv
class my_training_lesson(osv.osv):
_name = ‘my.training.lesson‘ #本對象的名稱
_inherit = ‘my.training.lesson‘ #要繼承的對象的_name
_columns = {
‘classroom_id‘: fields.many2one(‘my.training.classroom‘, u‘教室‘), #添加一個教室屬性,為多對一對象。
}
my_training_lesson()
###lesson_view.xml
<?xml versi>on="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--教室-->
<record model="ir.ui.view" id="my_training_lesson_from_inherit_classroom_view">
<field name="name">課程教室繼承視圖</field>
<field name="type">form</field>
<field name="model">my.training.lesson</field>
<field name="inherit_id" ref="my_training.my_training_lesson_from_view"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="classroom_id"/>
</field>
</field>
</record>
</data>
</openerp>
###classroom_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--教室-->
<record model="ir.ui.view" id="my_training_classroom_from_view">
<field name="name">教室</field>
<field name="type">form</field>
<field name="model">my.training.classroom</field>
<field name="arch" type="xml">
<form string="教室表單">
<field name="number"/>
<field name="capacity"/>
<field name="location" />
</form>
</field>
</record>
<!--定義列表視圖-->
<record model="ir.ui.view" id="my_training_classroom_tree_view">
<field name="name">教室列表</field>
<field name="type">tree</field>
<field name="model">my.training.classroom</field>
<field name="arch" type="xml">
<tree string="教室列表">
<field name="number"/>
<field name="capacity" />
<field name="location" />
</tree>
</field>
</record>
<!--定義視圖動作-->
<record model="ir.actions.act_window" id="action_my_training_classroom">
<field name="name">教室</field>
<field name="res_model">my.training.classroom</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="my_training_classroom_tree_view"/>
</record>
<!--定義菜單-->
<menuitem id="my_training_classroom_menu" name="教室" parent="my_training.my_training_menu" action="action_my_training_classroom"/>
</data>
</openerp>
openERP筆記 自定義模塊開發