• 1. DAY 1OpenERP二次开发技术培训
  • 2. 要做什么? 某培训机构针对英语、计算机等培训科目(subject)面向社会公众培训。黄老师排数学课,李老师排计算机课,赵老师专门负责销售,并记录报名每个课程的学员。需要一个可以管理老师、课程、学员之间关系的系统
  • 3. 要做什么?目标:定义管理科目、课程、老师、学生字段的表科目定义一个类似于英语、计算机等总括的课程 课程表示科目下的具体的一堂课 老师和学生都是组成课程的一部分
  • 4. 要做什么?目标:定义管理科目、课程、老师、学生字段的表科目名称负责人课程描述课程名称老师开始时间结束时间座位数学生科目老师(继承res.partner)老师学生(继承res.partner)学生多对多多对一一对多多对一
  • 5. 该怎么做?构建一个模块框架写模块声明写具体模型(表)的定义写具体模型(表)的视图将视图展现在界面上完成实例
  • 6. 构建一个模块框架四个基本文件__init__.pyPython的模块声明文件__openerp__.pyoe的模块声明文件osbzr_traning.py实际模型定义文件osbzr_traning_view.xml模型的视图定义文件
  • 7. 写模块声明name 该模块的模块名称 depends 该模块所依赖的模块 data 该模块所用的所有非py文件 auto_install 默认为False,当设置为True的时候,如果该模块 所依赖的所有模块都已经安装好了的时候, 那么默认安装此模块
  • 8. 写具体模型(表)的定义定义一个科目类型,使用_columns属性来定义表中字段_name oe系统内部使用的对象名称 _rec_name 默认值为name,返回该对象具体实例的名称 _columns 定义该对象中的字段 _defaults 返回创建一个对象实例中具体字段的默认值
  • 9. fields的基本字段字段文本chartext数值integerfloat时间datedatetimeselection关系one2manymany2onemany2one
  • 10. 文本字段
  • 11. 数值字段
  • 12. 时间字段
  • 13. 时间字段
  • 14. 关联字段多对一字段,多门学科中的负责人字段对应一个记录
  • 15. 关联字段一对多字段,一门课程信息对应于多个具体的课程
  • 16. 关联字段lesson_idpartner_id高等数学张三高等数学李四高等数学王五线性代数李四线性代数王五多对多字段,一门课程对应多个学生,一个学生对应多个课程
  • 17. 关联字段one2many字段和many2one字段在界面上显示一致 科目one2many多个课程,此时一个课程唯一对应于一个科目,修改课程信息将会影响到科目中的信息 课程many2many多个学生,但是一个学生也对应于多个科目,修改学生信息将不会影响到课程中信息 在课程中创建学生的时候,会在第三方表traning_lesson_ref_partner中生成一条记录
  • 18. 简单字段通用属性
  • 19. 科目中的字段科目名称负责人描述'name': fields.char(u'名称', size=64, translate=True),'person_id': fields.many2one('res.partner', u'负责人'),'description': fields.text(u'描述'),文本关系文本
  • 20. 名称'name': fields.char(u'名称', size=64, translate=True),字段名称该字段是否可翻译该字段存储值的最大数量该字段在界面上显示的名称该类的字段类型导入的fields类
  • 21. 负责人'person_id': fields.many2one('res.partner', u'负责人'),该字段所关联的表该字段所关联的表负责人本身是一个表(老师),一个科目只有一个负责人, 所以使用many2one将科目表中的负责人字段和老师表关联在一起
  • 22. 描述'description': fields.text(u'描述'),text文本用来支持大段的描述性文本
  • 23. 菜单、动作、视图之间的关系菜单视图1. 通过点击一个菜单,产生一个action,来控制显示一个视图 2. 菜单上使用action属性来控制点击菜单产生那一个action 3. 在action上定义怎样显示视图以及显示什么视图 4. 使用xml定义中的record标签来向系统中插入一条记录action(动作)
  • 24. 视图基本定义定义该记录的唯一标识ID定义系统中将要插入数据的对象视图界面使用ir.ui.view对象定义该视图的名称定义使用该视图的对象定义该视图的类型(基本类型list、form)在该标签下写视图的定义定义该视图的具体写法,根据type的不同而变化
  • 25. fields的基本字段list视图使用tree标签来定义list视图 使用多个field标签来定义界面上每一列视图 fields中的name标签使用model中定义的字段属性
  • 26. fields的基本字段form视图使用form标签来定义form视图 使用外层group来定义一个占用4列的界面控件 使用内层group来定义一个占用2列的界面控件 最内层的group中使用field标签来定义具体的空间 外层group内层group内层group
  • 27. fields的基本字段action(动作)定义定义该记录的唯一标识ID定义系统中将要插入数据的对象动作界面使用ir.actions.act_window对象定义该视图的名称定义使用该视图的对象定义将要显示的视图类型定义该动作将要显示的视图类型该动作指向的默认视图
  • 28. fields的基本字段菜单定义该记录的唯一标识ID该菜单的名称该菜单的上级菜单(上级菜单的ID)该菜单关联的动作(动作的ID)没有parent属性的菜单会显示在界面的最上边,该菜单为根菜单 parent为根菜单的菜单为一级菜单,一级菜单无法被点击,用来给菜单分类 parent为一级菜单的为二级菜单,在该菜单中定义实际action 每级菜单parent依次指向更高一级的菜单,可以逐级顶一下去
  • 29. 简单对象继承如果指定_name且值和继承对象的_name一样,则为同名继承,此时行为为扩充原有对象 如果指定_name且值和继承对象的_name不一样,则为异名继承,此时为重新声明一个新的对象使用_inherit来继承系统自带的对象使用_columns的来扩充继承对象的字段
  • 30. 简单视图继承不再需要type制定视图类型直接采用inherit_id 指定需要继承的视图ID仍然使用type为xml类型的field标签来定义如何扩充视图可以直接使用继承视图中的标签与属性(需要唯一确定)来找到需要更改的控件 支持使用XPath语法来找到继承视图中的需要更改的控件使用该标签来找到继承视图中需要更改的视图控件 使用position属性来表示如果继承视图控件ir.ui.view
  • 31. 简单的XPathXPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的表达式描述nodename选取此节点的所有子节点[index]按顺序索引当前子节点(从1开始)/从根节点选取//从匹配选择的当前节点搜索文档中的节点,而不考虑它的位置[@]选取属性
  • 32. position属性position属性用来描述找到xml节点后的具体行为@after:标签内的xml节点会插入在找到的具体节点后面 @before:标签内的xml节点会插入在找到的具体节点后面 @inside:标签内的xml节点会作为找到的具体节点的子节点 @replace:标签内的xml节点会替换找到的具体节点 @attributes:标签内使用attribute标签来改变找到节点的属性
  • 33. 过滤器domaindomain是OpenERP中使用的过滤/搜索条件1. domain可以直接用在动作中作为一个写死的限定条件 2. domain可以用在one2many和many2one字段中 3. domain使用一个基本的三元元祖作为基本参数: (field_value, operator, value)@field_value: 使用对象上定义的字段(可以使用.操作符获取关联字段上的值) @operatpr: domain上的操作符,可以是: ‘<>’, ‘!=‘, ‘>=‘, ‘<=‘, ‘<‘, ‘>’ ‘like’, ‘ilike’, ‘not like’, ‘not ilike’ (like区分大小写,ilike不区分大小写) ‘in’, ‘child_of’ (in是双向识别(‘name’, ‘in’, [‘zhang’, ‘li’]) 和([‘zhang’, ‘li’], ‘in’, ‘name’])效果是一样的 @value: 用于实际用于比较的值(可以直接使用对象上定义的字段)domain是一个列表,列表中使用逆波兰表达式来操作基本参数,其中可以使用的操作符为&, |, !['|', ('tags', '!=', ''), ('register_date', '=', False)]tags != ‘’ or register_date == False等价于
  • 34. 建立一个module的框架 继承一个基本的osv.osv类 使用不同的fields 定义一个form、list视图 定义一个动作(action) 定义一个菜单(menuitem) 了解如何继承系统对象 了解如何继承一个视图 了解domain的使用总结