openERP笔记 自定义模块开发
##需求描述
- 输入和查询课程,把信息储存到课程对象里
- 课程包含以下信息:名称,价格,天数,开始日期,教师,学员
- 每个课程可以有多个学员,要记录学员的姓名、电话、电子邮件
- 课程可以添加教材和作业等文档附件
- 用户可以设置默认值以加速输入
- 可以按名称查询课程,也可以用其他信息查找课程,并保存常用查询条件
- 可以导出课程信息到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笔记 自定义模块开发的更多相关文章
- OPENERP 中自定义模块 找不到的问题
问题的前提是你写的模块本身没有问题,我自己碰到的情况是在本机运行可以,但是上传到服务器上以后却无论怎么重启服务都找不到模块. 问题的根源在上传的文件权限设置不对: 假设自定义模块为rainsoft_p ...
- OpenERP中自定义模块卸载失败,Postgres数据库删不掉数据库,OpenERP登录不了一直在加载的问题解决方案。
解决方案也就是删除掉不用的数据库,OE会提示当前有N个Session不让Drop数据库. 对于Postgres 9.1 版本,在pgAdmin中查询以下语句: SELECT pg_terminate_ ...
- Python3学习笔记——自定义模块
import sys import os print(__file__) #打印相对路径 base_dir = os.path.dirname(os.path.dirname(os.path.absp ...
- python 自定义模块的发布和安装
[学习笔记] 自定义模块 使用的是pycharm 说白了就是.py文件都可以作为模块导入,像定义一个文件 名字为Mycode __all__ = ["add","sub& ...
- 一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码
概述 Power Automate for Desktop (以下简称PAD)是微软推出的一款针对Windows桌面端的免费RPA(机器人流程自动化)工具,它目前默认会随着Windows 11安装,但 ...
- openERP笔记,自定义开发模块
##目标 OpenERP模块基本结构 使用模块添加额外的字段(Date Required和Rush Order) 扩展视图, 让OpenERP能够显示新的字段 修改用于OpenERP工作流的可用状态 ...
- apicloud 自定义模块的开发与上架注意事项
模块开发要点与返回刷新页面注意事项 1.介绍 apicloud 除了使用官方提供的模块外,我们可以自定义一些模块供自己使用和上传到官方出售.针对没有提供或者价格过贵的模块,如果有时间自己可以进行研究. ...
- python开发学习-day05(正则深入、冒泡排序算法、自定义模块、常用标准模块)
s12-20160130-day05 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- Node.js学习笔记(二) --- CommonJs和Nodejs 中自定义模块
一. 什么是 CommonJs? JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器. 然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用程序.并没有制定一 ...
随机推荐
- (原)Max Area of Island(即连通域标记)
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10493114.html 1. 问题 Given a non-empty 2D array grid ...
- 写入多线程Log4net 多线程写入
问题描述: 系统经常出现log无缘无故的丧失,每次系统出问题时去查log时发明log没有,愁闷了许久. 今天搞了将近一天,终于搞定. 处理步骤: 写了个控制台程序,在while(true)里头调用lo ...
- AYUI -AYUI风格的 超美 百度网盘8.0
2017-03-23 19:18:43 (截止到2017-3-23 20:20:33开发结束)体验地址: http://pan.baidu.com/s/1bX28H4 新增传输列表 ======== ...
- Xcode真机调试失败:The identity used to sign the executable is no longer valid
在Xcode中突然好久没有使用真机调试了.今天使用真机的时候.出现例如以下的警告.并真机执行失败: The identity used to sign the executable is no lon ...
- 《Effective Java 第三版》目录汇总
经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习.时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正. 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用静态工厂方法替 ...
- 在 java 开发接口中需要注意的问题
1 在开发过程中免不了对接上游或下游,有合作就要保证入参.出参的准确性.一个接口一般只能处理有限情况下的情况,因此在逻辑处理前要对入参进行校验. 2 在自己的逻辑处理过程中,要时刻持有怀疑的态度.假设 ...
- ftp软件中保持连接命令CWD、PWD、LIST、NOOP四个操作命令解析
转自:http://www.aspjzy.com/A/148.html 各位站长都知道,我们在维护网站的时候,经常需要一直保持ftp连接状态,这个时候在很多ftp客户端软件中都有一个保持全局连接的选项 ...
- jYD框架使用
jQuery是一个非常好的框架,涉及的内容比较多,随着现在浏览器的发展,原生JS的功能越来越强大,jQuery包含内容很多,但是常用的功能无非涉及到Dom操作,事件,样式,表单和Ajax交互.引入那么 ...
- shell md5sum
md5sum out.a echo "fd_limit=$(ulimit -n), fd_used=$(ll /proc/4741/fd | wc -l)" 需找句柄,及fd ...
- CreateWindowEx failed (当前程序已使用了 Window 管理器对象的系统允许的所有句柄。)
我在QT图形场景视图中通过QGraphicsProxyWidget添加代理Widget(实现添加基本的QT Widget,如按钮.复选框.日期时间控件等),当数量超过3500左右的时候,QT应用程序直 ...