##需求描述
- 输入和查询课程,把信息储存到课程对象里
- 课程包含以下信息:名称,价格,天数,开始日期,教师,学员
- 每个课程可以有多个学员,要记录学员的姓名、电话、电子邮件
- 课程可以添加教材和作业等文档附件
- 用户可以设置默认值以加速输入
- 可以按名称查询课程,也可以用其他信息查找课程,并保存常用查询条件
- 可以导出课程信息到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, osvclass 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
课程表单 form my.training.lesson 课程列表 tree my.training.lesson 课程 my.training.lesson form form,tree
##通过继承修改模块
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 lessonimport 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, osvclass 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, osvclass 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
on="1.0" encoding="utf-8"?>课程教室继承视图 form my.training.lesson
###classroom_view.xml
教室 form my.training.classroom 教室列表 tree my.training.classroom 教室 my.training.classroom form form,tree