您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Odoo90模块开发全流程
构建Odoo模块模块组成o业务对象业务对象声明为Python类,由Odoo自动载入.o数据文件XML或CSV文件格式,在其中声明了元数据(视图或工作流)、配置数据(模块参数)、演示数据等.oWeb控制器处理Web浏览器发来的requests.o静态web数据Web用到的图像,CSS或JavaScript文件.模块结构一个Odoo模块也是一个Python模块,存放在一个目录中,包含一个__init__.py文件,用于导入其他Python模块.from.importmymoduleodoo.py提供了一个子命令scaffold可以方便地创建一个空的模块.$odoo.pyscaffoldmodulenamewheretoputit命令执行后,将会创建一个子目录并且其中包括了Odoo模块所需的一些基本文件.练习#1执行./odoo.pyscaffoldopenacademyaddons,在addons目录下创建一个名为openacademy的模块,生成的目录文件结构如下.openacademy├──__init__.py├──__openerp__.py├──controllers.py├──demo.xml├──models.py├──security│└──ir.model.access.csv└──templates.xml各文件内容请查看文件或查看原文,然后对__openerp__.py中的几种标识文本进行修改,至少需要添加'installable':True,'application':True。对象关系映射ORM层是Odoo的一个关键组件,它可以避免大部分的SQL语句编写从而提高扩展性和安全性.业务对象用派生自Model的Python类(模型)来编写,该类的_name属性定义了模型在Odoo系统中的名称.fromopenerpimportmodelsclassMinimalModel(models.Model):_name='test.model'字段字段定义模型能够存储什么以及在哪里存储,字段在模型类中用属性来定义.fromopenerpimportmodels,fieldsclassLessMinimalModel(models.Model):_name='test.model2'name=fields.Char()通用属性与模型类似,字段也可以通过参数传递对其进行设定:name=field.Char(required=True)字段的常用属性有:ostring(unicode,default:field’sname)字段标签名称,会显示在界面上(对用户可见)。orequired(bool,default:False)如果值为True,此字段值不能为空,设置默认值或者在创建记录时提供。ohelp(unicode,default:‘’)界面上显示提示语。oindex(bool,default:False)如果值为True,创建表时将为此列添加索引。简单字段字段可以分为两类:简单字段和关系字段.前者为原子值,直接保存在模型对应的数据库表中;后者连接到其他的记录上(可以是相同的模型也可以是不同的模型).Boolean,Date,Char这些都是简单字段.保留字段Odoo在模型中自动创建并维护一些字段,这些字段就是保留字段,这些字段数据不需要也不应该手动去修改.oid(Id)一条记录的唯一id。ocreate_date(Datetime)记录创建时间。ocreate_uid(Many2one)谁创建的记录。owrite_date(Datetime)最后修改时间。owrite_uid(Many2one)谁最后修改的记录。特殊字段默认情况下,Odoo要求模型中有一个name字段,用于显示和搜索,通过设置_rec_name也可以达到这样的目的.练习#2在openacademy模块中定义一个新的模型Course,openacademy/models.py内容如下:#-*-coding:utf-8-*-fromopenerpimportmodels,fields,apiclassCourse(models.Model):_name='openacademy.course'name=fields.Char(string=Title,required=True)description=fields.Text()数据文件Odoo是一个高度数据驱动的系统,虽然使用Python代码来定制模块行为,但很多模块数据是在其载入时setup的,并且有些模块仅仅为Odoo添加数据.通过数据文件来定义模块数据,例如可以使用XML文件中的record元素定义数据,每一个record元素创建或者更新数据库中的一条记录,形式如下:openerpdatarecordmodel={modelname}id={recordidentifier}fieldname={afieldname}{avalue}/field/record/dataopenerpomodelOdoo模型名.oid外部ID(ExternalIdentifier),通过它可以引用到记录(并且不需要知道记录所在的数据库ID).o元素name属性用于确定字段名称(例如description),该元素的body给出字段的值.数据文件必须在模块载入清单文件列表中,也就是__openerp__.py的’data’列表(全部载入)或’demo’列表(只有设定为载入演示数据才会载入)中.练习#3创建一个数据文件来向Course中添加数据,编辑openacademy/demo.xml,并确认__openerp__.py的’demo’列表中有该文件.openerpdatarecordmodel=openacademy.courseid=course0fieldname=nameCourse0/fieldfieldname=descriptionCourse0'sdescriptionCanhavemultiplelines/field/recordrecordmodel=openacademy.courseid=course1fieldname=nameCourse1/field!--nodescriptionforthisone--/recordrecordmodel=openacademy.courseid=course2fieldname=nameCourse2/fieldfieldname=descriptionCourse2'sdescription/field/record/data/openerp动作和菜单在Odoo中,动作和菜单都是定义在数据库中的数据记录,一般通过数据文件来定义.动作可以由三种方式触发:o点击菜单项(菜单项链接到特定动作)o点击视图上的按钮(如果按钮连接到动作)o作为对象的上下文动作使用menuitem声明一个ir.ui.menu并将其连接到一个action,可以用下面的形式的代码.recordmodel=ir.actions.act_windowid=action_list_ideasfieldname=nameIdeas/fieldfieldname=res_modelidea.idea/fieldfieldname=view_modetree,form/field/recordmenuitemid=menu_ideasparent=menu_rootname=Ideassequence=10action=action_list_ideas/注意:action必须先于menu的连接使用定义,数据文件在载入时顺序地执行,所以动作的ID必须首先存在于数据库中才能使用.练习#4定义一个新的菜单项访问OpenAcademy课程.创建openacademy/views/openacademy.xml文件,并在其中添加动作和菜单.?xmlversion=1.0encoding=UTF-8?openerpdata!--windowaction--!--Thefollowingtagisanactiondefinitionforawindowaction,thatisanactionopeningavieworasetofviews--recordmodel=ir.actions.act_windowid=course_list_actionfieldname=nameCourses/fieldfieldname=res_modelopenacademy.course/fieldfieldname=view_typeform/fieldfieldname=view_modetree,form/fieldfieldname=helptype=htmlpclass=oe_view_nocontent_createCreatethefirstcourse/p/field/record!--toplevelmenu:noparent--menuitemid=main_openacademy_menuname=OpenAcademy/!--Afirstlevelintheleftsidemenuisneededbeforeusingaction=attribute--menuitemid=openacademy_menuname=OpenAcademyparent=main_openacademy_menu/!--thefollowingmenuitemshouldappear*after*itsparentopenacademy_menuand*after*itsactioncourse_list_action--menuitemid=courses_menuname=Coursesparent=openacademy_menuaction=course_list_action/!--Fullidlocation:action=openacademy.course_list_actionItisnotrequiredwhenitisthesamemodule--/data/openerp在__openerp__.py中添加这个数据文件名到’data’.'data':[#'security/ir.model.access.csv','templates.xml','views/openacademy.xml',],更新模块后可以看到菜单,操作看看效果.基本视图视图定义了模型数据如何显示,每种类型的视图代表一种数据可视化模式.基本的视图定义一个视图是以一条ir.ui.view模型数据的形式定义的.recordmodel=ir.ui.viewid=view_idfieldname=nameview.name/fieldfieldname=modelobject_name/fieldfieldname=priorityeval=16/fieldname=archtype=xml!--viewcontent:form,tree,graph,...--/field/recordTreeviewsTreeview也被称为listviews,在一个表格中显示记录.根元素是tree,最简形式的treeview只是简单地列出每条记录的多个字段,每个字段为一列.treestring=Idealistfieldname=name/fieldname=inventor_id//treeFormviewsForm用于创建或编辑单条记录,根元素是form,可以在f
本文标题:Odoo90模块开发全流程
链接地址:https://www.777doc.com/doc-637722 .html