构建Odoo模块教程.docx

上传人:b****7 文档编号:10410318 上传时间:2023-02-11 格式:DOCX 页数:82 大小:44.13KB
下载 相关 举报
构建Odoo模块教程.docx_第1页
第1页 / 共82页
构建Odoo模块教程.docx_第2页
第2页 / 共82页
构建Odoo模块教程.docx_第3页
第3页 / 共82页
构建Odoo模块教程.docx_第4页
第4页 / 共82页
构建Odoo模块教程.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

构建Odoo模块教程.docx

《构建Odoo模块教程.docx》由会员分享,可在线阅读,更多相关《构建Odoo模块教程.docx(82页珍藏版)》请在冰豆网上搜索。

构建Odoo模块教程.docx

构建Odoo模块教程

构建Odoo模块

模块组成

o业务对象

业务对象声明为Python类,由Odoo自动载入.

o数据文件

XML或CSV文件格式,在其中声明了元数据(视图或工作流)、配置数据(模块参数)、演示数据等.

oWeb控制器

处理Web浏览器发来的requests.

o静态web数据

Web用到的图像,CSS或JavaScript文件.

模块结构

一个Odoo模块也是一个Python模块,存放在一个目录中,包含一个__init__.py文件,用于导入其他Python模块.

from.importmymodule

odoo.py提供了一个子命令scaffold可以方便地创建一个空的模块.

$odoo.pyscaffold

命令执行后,将会创建一个子目录并且其中包括了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系统中的名称.

fromopenerpimportmodels

classMinimalModel(models.Model):

_name='test.model'

字段

字段定义模型能够存储什么以及在哪里存储,字段在模型类中用属性来定义.

fromopenerpimportmodels,fields

classLessMinimalModel(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,api

classCourse(models.Model):

_name='openacademy.course'

name=fields.Char(string="Title",required=True)

description=fields.Text()

数据文件

Odoo是一个高度数据驱动的系统,虽然使用Python代码来定制模块行为,但很多模块数据是在其载入时setup的,并且有些模块仅仅为Odoo添加数据.

通过数据文件来定义模块数据,例如可以使用XML文件中的元素定义数据,每一个元素创建或者更新数据库中的一条记录,形式如下:

{avalue}

omodel

Odoo模型名.

oid

外部ID(ExternalIdentifier),通过它可以引用到记录(并且不需要知道记录所在的数据库ID).

o元素

name属性用于确定字段名称(例如description),该元素的body给出字段的值.

数据文件必须在模块载入清单文件列表中,也就是__openerp__.py的’data’列表(全部载入)或’demo’列表(只有设定为载入演示数据才会载入)中.

练习#3

创建一个数据文件来向Course中添加数据,编辑openacademy/demo.xml,并确认__openerp__.py的’demo’列表中有该文件.

Course0

Course0'sdescription

Canhavemultiplelines

Course1

--nodescriptionforthisone-->

Course2

Course2'sdescription

动作和菜单

在Odoo中,动作和菜单都是定义在数据库中的数据记录,一般通过数据文件来定义.

动作可以由三种方式触发:

o点击菜单项(菜单项到特定动作)

o点击视图上的按钮(如果按钮连接到动作)

o作为对象的上下文动作

使用声明一个ir.ui.menu并将其连接到一个action,可以用下面的形式的代码.

Ideas

idea.idea

tree,form

action="action_list_ideas"/>

注意:

action必须先于menu的连接使用定义,数据文件在载入时顺序地执行,所以动作的ID必须首先存在于数据库中才能使用.

练习#4

定义一个新的菜单项访问OpenAcademy课程.

创建openacademy/views/openacademy.xml文件,并在其中添加动作和菜单.

xmlversion="1.0"encoding="UTF-8"?

>

--windowaction-->

--

Thefollowingtagisanactiondefinitionfora"windowaction",

thatisanactionopeningavieworasetofviews

-->

Courses

openacademy.course

form

tree,form

Createthefirstcourse

--toplevelmenu:

noparent-->

--Afirstlevelintheleftsidemenuisneeded

beforeusingaction=attribute-->

parent="main_openacademy_menu"/>

--thefollowingmenuitemshouldappear*after*

itsparentopenacademy_menuand*after*its

actioncourse_list_action-->

action="course_list_action"/>

--Fullidlocation:

action="openacademy.course_list_action"

Itisnotrequiredwhenitisthesamemodule-->

在__openerp__.py中添加这个数据文件名到’data’.

'data':

[

#'security/ir.model.access.csv',

'templates.xml',

'views/openacademy.xml',

],

更新模块后可以看到菜单,操作看看效果.

基本视图

视图定义了模型数据如何显示,每种类型的视图代表一种数据可视化模式.

基本的视图定义

一个视图是以一条ir.ui.view模型数据的形式定义的.

view.name

object_name

--viewcontent:

,,,...-->

Treeviews

Treeview也被称为listviews,在一个表格中显示记录.根元素是,最简形式的treeview只是简单地列出每条记录的多个字段,每个字段为一列.

Formviews

Form用于创建或编辑单条记录,根元素是,可以在form中组合各种高层结构元素(如groups,notebooks)以及交互元素(如buttons,fields).

练习#5

为openacademy创建formview,views/openacademy.xml数据文件中增加容.

xmlversion="1.0"encoding="UTF-8"?

>

course.form

openacademy.course

--windowaction-->

--

Thefollowingtagisanactiondefinitionfora"windowaction",

更新模块,创建一个Course,可以看到formview变了.

练习#6

使用notebook.在formview中,将description字段放在一个tab中,方便随后添加其他tabs,对练习#5的formview数据做如下修改.

Thisisanexampleofnotebooks

更新模块,看效果.

More

还可以使用HTML为formview提供更加灵活的布局,例如下面的例子.

states="draft"class="oe_highlight"/>

states="confirmed"class="oe_highlight"/>

states="confirmed,done"/>

Searchviews

Searchviews用来自定义listviews及其它统计/多条记录视图中的搜索字段.根元素为,其子元素定义了在哪些字段上进行搜索.

如果一个模型没有定义对应的Searchview,odoo自动创建一个仅搜索name字段的searchview.

练习#7

添加title以及description搜索,在views/openacademy.xml中定义searchview.

course.search

openacademy.course

--windowaction-->

--

Thefollowingtagisanactiondefinitionfora"windowaction",

更新模块,搜索框输入字符后可以看到下方能够选择搜索description字段.

模型中的关联

概述

一个模型中的记录可能关联到其他模型的记录,例如销售订单记录会关联到一个包含客户信息的客户记录.

练习#8

为了说明数据关联,首先增加新的模型.

OpenAcademy模块中,一个session是一个在特定时间针对特定听众讲授课程的过程.需要为session创建相应的模型.

session具有name,开始日期,持续时间以及座位数量等.此外还需要添加相应的action和menuitem显示模型数据.

首先在openacademy/models.py中创建Session类.

classSession(models.Model):

_name='openacademy.session'

name=fields.Char(required=True)

start_date=fields.Date()

duration=fields.Float(digits=(6,2),help="Durationindays")

seats=fields.Integer(string="Numberofseats")

然后在openacademy/view/openacademy.xml中添加用于访问session模型的action和menuitem定义.

--Fullidlocation:

action="openacademy.course_list_action"

Itisnotrequiredwhenitisthesamemodule-->

--sessionformview-->

session.form

openacademy.session

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1