Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 7290|回复: 0
打印 上一主题 下一主题

入门练习实例(下)

[复制链接]

2

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
跳转到指定楼层
楼主
发表于 2015-8-30 17:04:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

通过继承修改一个模块
需求
我们想添加一个教室对象,而且给每个课程都分配一个教室。
分析有两个办法可以做到:一、修改上面的程序。虽然上面是新的模块可能我们直接修改没有特别的问题,但是如果是系统默认模块怎么办呢,
如果我直接修改了源码,那么以后模块的升级会造成各种不可预料的问题,而且同一个源码会影响到所有的的帐套。所以我们建议通过继承来修改模块。
我们会以一个oecn_training_classroom来继承oecn_training
|--oecn_training_classroom     |--__init__.py     |--__openerp__.py     |--lesson.py  
#继承oecn.training.lesson对象的文件     |--classroom.py      |--lesson_view.xml     |--classroom_view.xml
__init__.py
Python (plain)
  • # -*- coding: utf-8 -*-
  • #导入包含Python代码的所有文件和目录
  • import lesson
  • import classroom
__openerp__.pyPython (plain)
  • # -*- coding: utf-8 -*-
  • # -*- coding: utf-8 -*-
  • # name: 模块名
  • #version: 模块版本
  • #description:模块说明
  • #author:作者
  • #website:网址
  • #depends:#依赖的模块,此模块我们会继承oecn_training所以必须依赖他
  • #update_xml:模块更新的时候会读入的文件  #需要继承的视图
  • #installable:可否安装
  • #category:模块类型
  • {
  •    "name" : "OECN Training Classroom",
  •    "version" : "1.0",
  •    "description" : "OECN Training Demo -- ClassRoom",
  •    "author" : "Shine IT",
  •    "website" : "http://www.openerp.cn",
  •    "depends" : ['oecn_training'],
  •    "update_xml" : [
  •        "lesson_view.xml"  ,
  •        "classroom_view.xml",],
  •    "installable" : True,
  •    "category":"Generic Modules/Others"
  • }
lesson.pyPython (plain)
  • # -*- coding: utf-8 -*-
  • from openerp.osv import fields, osv
  • ?
  • class oecn_training_lesson(osv.osv):
  •     _inherit = 'oecn.training.lesson' #要继承的对象的_name
  •     _columns = {
  •        'classroom_id':fields.many2one('oecn.training.classroom','教室'),#添加一个教室属性,为多对一对象。
  •         }
  • oecn_training_lesson()
  • ?
  • # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
classroom.py
  1. Python (plain)

  2.     # -*- coding: utf-8 -*-

  3.     from openerp.osv import fields, osv

  4.     ?

  5.     class oecn_training_classroom(osv.osv):

  6.     _name = 'oecn.training.classroom'

  7.     _description = u'OECN 教室'

  8.     _columns = {

  9.     'number':fields.char(u'编号', size=64, select=True),

  10.     'capacity':fields.integer(u'容纳人数', select=True),

  11.     'location':fields.char(u'地点', size=125, select=True),

  12.     }

  13.     oecn_training_classroom()

  14.     ?

  15.     # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
复制代码

lesson_view.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <openerp>
  3.     <data>
  4.         <!--OECN 教室-->
  5.             <record model="ir.ui.view" id="oecn_training_lesson_from_inherit_classroom_view">
  6.             <field name="name">课程教室继承视图</field>
  7.             <field name="type">form</field>
  8.             <field name="model">oecn.training.lesson</field>
  9.              <field name="inherit_id" ref="oecn_training.oecn_training_lesson_form_view"/>
  10.             <field name="arch" type="xml">
  11.                 <field name="name" position="after">
  12.                     <field name="classroom_id"/>
  13.                 </field>
  14.             </field>
  15.         </record>
  16.         
  17.     </data>
  18. </openerp>
复制代码

上面就是继承视图的例子。
id:XML ID每个模块里必须是唯一的,如果存在多个,则会后者覆盖前者。
type:需要继承的视图的类型。
model:需要继承的对象的名字
inherit_id:需要继承的视图的ID,格式为:模块名.XML ID
                <field name="name" position="after">                    <field name="classroom_id"/>                </field>意思是在要继承的视图的name字段后(position="after"),添加一个教室字段。
classroom_view.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <openerp>
  3.     <data>
  4.         <!--OECN 教室-->
  5.             <record model="ir.ui.view" id="oecn_training_classroom_from_view">
  6.             <field name="name">教室</field>
  7.             <field name="type">form</field>
  8.             <field name="model">oecn.training.classroom</field>
  9.             <field name="arch" type="xml">
  10.                 <field name="number"/>
  11.                 <field name="capacity"/>
  12.                 <field name="location" />
  13.             </field>
  14.         </record>
  15.          <!--定义列表视图-->
  16.         <record model="ir.ui.view" id="oecn_training_classroom_tree_view">
  17.             <field name="name">教室列表</field>
  18.             <field name="type">tree</field>
  19.             <field name="model">oecn.training.classroom</field>
  20.             <field name="arch" type="xml">
  21.                 <field name="number"/>
  22.                 <field name="capacity"/>
  23.                 <field name="location" />
  24.             </field>
  25.         </record>
  26. <!--定义视图动作-->
  27.     <record model="ir.actions.act_window"  id="action_oecn_training_classroom">
  28.         <field name="name">教室</field>
  29.         <field name="res_model">oecn.training.classroom</field>
  30.         <field name="view_type">form</field>
  31.         <field name="view_mode">form,tree</field>
  32.         <field name="view_id" ref="oecn_training_classroom_tree_view"/>
  33.     </record>
  34.         <menuitem id="oecn_training_classroom_menu" name="OECN Training Classroom" parent="oecn_training.oecn_training_menu" action="action_oecn_training_classroom"/>   
  35.     </data>
  36. </openerp>
复制代码

继承修改一个模块后, 请记住,也需要按上面安装一个模块那样. 去 重启服务器, 更新模块, 推荐再退出OE,重新登陆一下.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-5-4 10:53 , Processed in 0.013981 second(s), 15 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表