首页

来自Odoo大V社-odoo中文开发手册
95102545讨论 | 贡献2017年3月20日 (一) 21:29的版本 标题和副标题

跳转至: 导航搜索

目录

Odoo 大V社概况

Odoo 大V社成员来自五湖四海,他们热爱开源,无私奉献,甘于把自己的业余时间投入到公益的 Odoo 相关资料的整理中去,
为 Odoo 在中国区的推广无私奉献。
odoo 中文书籍交流群:343593855(验证信息:参与odoo中文书籍)

Odoo中文版技术书籍项目

  1. 项目一期目标: Odoo 中文开发手册
  2. 项目性质:公益,保留所有参与人员的署名权;项目成果归全人类
  3. 项目使命:Odoo 中文书籍编写整理,推倒 odoo 语言壁垒,助力 odoo 中国推广
  4. 项目成员:
    1. 统筹:
      • 01.广州-唐振宽(稿件初审) 02.广州-黄伟杰(任务分派) 03.广州-彭 明(进度跟踪)
    2. 审核:
      • 01.苏州-刘春涛(ChinaMaker)
    3. 成员:
01.苏州时 威 02.苏州庄春梅 03.杭州胡 恒 04.广州陈厚源
05. 06.苏州孙保锁 07.成都曾发军 08.深圳季蜗牛
09.北京乔明洋 10.香港胡sir 11.上海高守庆 12.上海赵祥涛
13.上海罗英川布 14.台北蘇sir 15.苏州-n37r06u3 16.石家庄-leo

前言

第一章 Odoo 入门

安装Odoo主机服务器

准备Debian 主机

为创建Odoo用户帐户

从源码安装Odoo

创建新的Odoo应用数据库

管理你的Odoo数据库

Odoo 版本

更多服务器选项

Odoo 服务器配置文件

更改侦听端口

数据库的过滤选项

管理服务器日志消息

在工作站上进行开发

使用Linux 文本编辑器

安装和配置 Samba

激活开发者工具

安装第三方模块

查找社区模块

配置 addons 路径

更新应用程序列表

第一章 小结

第二章 构建您的第一个应用程序

基本概念

了解应用程序和模块

修改和扩展模块

创建模块的基本框架

关于许可证

添加 addons 路径

安装新模块

升级模块

服务器开发模式

模型层

创建数据模型

加入自动化测试

视图层

添加菜单选项

创建窗体视图

业务凭证窗体视图

添加动作按钮

用groups来组织forms

完整的Form视图

添加列表和搜索视图

业务逻辑层

添加业务逻辑

添加测试

设置安全访问权限

测试安全访问权限

添加访问控制安全

Row-level访问规则

更好的模块描述

第二章 小结

第三章 继承–扩展现有的应用程序

向待办事宜应用程序添加共享功能

扩展模型

向模型中添加字段

修改现有字段

修改模型的方法

扩展视图

扩展表单视图

扩展树视图和搜索视图

更多的模型继承机制

使用原型继承复制特征

使用委托继承嵌入模型

添加社交网络功能

修改数据

修改菜单和操作记录

修改安全记录规则

第三章 小结

第四章 模块数据

了解外部标识符

寻找外部标识符

导出和导入数据

导出数据

导入数据

CSV数据文件相关记录

模块数据

演示数据

XML数据文件

数据的noupdate属性

在XML里定义记录

设置字段值

使用表达式设置值

设置字段值的关系

常用模型的快捷键

XML数据文件的其它操作

删除记录

触发功能和工作流

第四章小结

第五章 模型 - 结构化应用程序数据

将应用程序特性组织到模块中

todo_ui模块介绍

创建模型

模型属性

模型和Python类

瞬态和抽象模型

检查现有模型

创建字段

基本字段类型

公共字段属性

特殊字段名称

模型之间的关系

多对一关系

多对多关系

一对多反向关系

分层关系

使用动态关系的参考字段

计算字段

在计算字段上搜索和写入

存储计算字段

关联字段

模型约束

第五章 小结

第六章 视图 - 设计用户界面

使用XML文件定义用户界面

菜单项

窗口动作

上下文和域

上下文数据

域表达式

窗体视图

 正如前面的章节中介绍, 表单视图可以采用简单的布局或类似于纸张文档的业务票据布局.

我们现在将了解如何设计这些业务文档视图和如何使用相关元素和可用的小部件。 通常我们会通过继承和扩展to_do 视图来实现, 但为了更加清晰, 我们将创建全新的视图来重写原视图。

处理同一类型的几个视图

 相同模型可以有多个同类型的视图,因为一个窗口动作通过它的“XML ID ”可以指向的特定的视图。这样我们就可以灵活的根据菜单项,通过不同的视图打开相同的模型。
 要实现以上功能,需要根据视图中的 XML ID,为窗口操作添加view_id属性, 例如我们在todo_app.action_todo_task 动作中曾使用类似view_id="view_form_todo_task_ui"的做法。
 但是, 如果没有特定视图的定义,将如何?
 在这种情况下, 使用的将是第一个返回的查询视图,这将是一个具有较低的优先级视图。如果我们添加新的视图,并设置它的优先级低于现有的, 它将被调用。最终的结果是:看起来像这个新视图覆盖了原来的。
 因为缺省值的视图优先级是 16, 较低优先级的视图将被采纳, 所以 15 的优先级将工作。为了保持我们的例子可读性,这不是最常用的方法。

我们将在下一个例子中使用优先级方法。

业务文档视图

业务应用程序通常是关于仓库产品、财会部门发票等记录的系统。大部分这些记录信息都可用纸质文档呈现。为了更好的用户体验,表单视图都是在模仿这些纸质文档。 例如在我们的系统中,我们可以认为 “to_do task”包含需要填写的纸制表单。 我们将提供一个遵循该设计思想的表单视图。

要增加一个具有业务文档视图基本骨架的XML视图,我们需要编辑“views/todo_views.xml”文件,并置于文件顶部。

<record id="view_form_todo_task_ui" model="ir.ui.view"> <field name="model">todo.task</field> <field name="priority">15</field> <field name="arch" type="xml"> <form> <header> </header> <sheet> </sheet>

<field name="message_follower_ids" widget="mail_followers" /> <field name="message_ids" widget="mail_thread" />

</form> </field> </record>

 视图名称是可选的,如果缺少将自动生成。为了简单,我们省略了视图记录中的<field name="name">元素。
 业务文档通常包含3大部:标题状态栏、主要内容表单、底部历史信息和通讯内容。在底部的历史和通信部分,可以使用邮件插件模块提供的社交网络小部件。为了可以使用它们,我们的模型需要继承“mail.thread”混合模型。详情见第3章 继承–扩展现有的应用程序。

header头部

 顶部的标题将展示文档流转的阶段和生命周期,以及动作按钮.
 这些操作按钮一般为表单按钮,最重要的阶段可以使用class=“oe_highlight”突出显示.文档生命周期通过状态栏小控件呈现当前所处的状态.这些通常是状态选择字段或者多对一的阶段字段.这些字段在很多odoo核心模块中可以找到.这些多对一的阶段字段 通过建立模型实现过程步骤.它们可以根据用户需求动态编译,并且完美支持看板.
 状态是一个选择列表,呈现的是过程中有几个相当稳定的步骤阶段,例如:新建、处理中、完成。它不是由用户最终配置的,但因为它是静态的,所以在事务逻辑中更容易使用。它也支持字段展示:状态属性可以根据文档当前的属性决定一个字段是否向用户呈现。
 阶段出现的比状态晚,两者并存,但是阶段取代状态将是odoo内核发展的趋势。但正如所看到的前面的解释,状态仍然提供一些阶段不具备的功能。通过状态和阶段的互相映射,可以做到两全其美。在前面的章节中,在任务阶段模型中添加一个状态字段,通过计算控制字段,使得状态字段属性可以使用。

在views/todo_view.xml 文件中我们可以添加状态栏来扩展基本的标题。 <header> <field name="state" invisible="True" /> <button name="do_toggle_done" type="object" attrs="{'invisible':[('state','in',['draft'])]}" string="Toggle Done" class="oe_highlight" /> <field name="stage_id" widget="statusbar" clickable="True" options="{'fold_field': 'fold'}" /> </header>

 这里我们增加了一个隐藏的状态字段。我们需要客户端发送给服务器的数据请求中包含该字段,否则就不可用于表达式。
提示
 非常重要的是:任何你想使用的字段,在一个域或属性表达式,必须加载到视图中,故可以将随时会使用但不需要用户看到的字段设置为不可见。

下一步将一个按钮添加到状态栏,让用户切换任务完成标记。状态栏中按钮的显示,应该依据文档所处步骤阶段而变化。在草稿状态,我们通过“attrs”属性隐藏按钮。要实现这个功能,需要使用状态字段,它无须呈现在窗口,所以我们必须添加这一隐藏字段。如果我们有一个状态选择字段,我们可以使用状态属性。在这种情况下我们可以通过state=“open,done”做到同样的效果。虽然它不如‘attrs’属性灵活,它更多的是简洁.这些可见性也可以用于其他视图元素,例如字段.我们将在本章后面更详细地探讨它们。点击属性允许用户点击状态栏来改变文件的阶段。我们通常会启用这个,但也有我们不需要情况。例如当我们需要更多的控制工作流程或者用户通过可见的动作按钮来实现阶段的行进,这样方便实现阶段转换前的确认。

 当使用阶段状态栏小部件时,我们可以使用在阶段族群中隐藏的很少使用的阶段。为此,阶段模型必须有一个标志来

配置隐藏属性,通常命名为fold。StatusBar控件应该使用一个options属性,如前面代码所示,提供字段名的fold_field选项。当使用含有状态字段的状态栏小部件时,通过statusbar_visible 可以实现类似的效果。它可以呈现特殊情况下各种可见的和隐藏的异常状态。 例如: <field name="stage_id" widget="statusbar" clickable="True" statusbar_visible="draft,open" />

sheet工作表

 表画布是表单实际的数据元素放置的主要区域,它看起来像一个实际的纸质文件,odoo中的记录也被作为文档。
 通常,一个文档表结构将这些部分:

文档标题和副标题。 在右上角的一个按钮盒, 其他文档标题字段。 在页面和标签中提供有组织字段的笔记簿。

 让我们一起来了解下这些区域.

标题和副标题

 <group>元素之外的字段 是不会自动呈现标签的。这同样适用于标题元素,所以<label for"..."/>元素经常被用来呈现标题。

虽然会带来一些额外的工作,但是这样做的优势是:对标签显示具有更多的控制。

常规的HTML,包括css-stylel元素,也可以用来制作闪光标题。为了实现最佳效果,标题应该通过oe_title嵌入在
中。
 下边是一个扩展的sheet元素,它的标题添加了一些额外字段作为副标题。

<sheet><div class="oe_title"> <label for="name" class="oe_edit_only"/> <h1><field name="name"/></h1> <h3> <span class="oe_read_only>By</span> <label for="user_id" class="oe_edit_only"/> <field name="user_id" class="oe_inline" /> </h3> </div> <!-- More elements will be added from here... --> </sheet>


 在这里,我们可以看到,我们使用常规的HTML元素,如div,span,H1,和H2。<label>元素允许我们控制何时何地展示。‘for’属性告诉我们获取标签文本的字段。另一种可能性是使用字符串属性来提供特定文本。我们的实例使用了class="oe_edit_only",这样只有在编辑模式可见。
 在某些情况下,如合作伙伴或产品,需要有代表性的图像显示在左上角。假设我们有一个my_image二进制字段,我们可以在<div class=“oe_title”>行前添加: <field name="my_image" widget="image" class="oe_avatar"/> 。

智能按钮区域

 在右上角 有一个隐藏的按钮箱.8.0版本引入了智能按钮,当被点击时,可以呈现为矩形的统计指示.

我们可以 在"oe_title" DIV 后添加按钮框,如下:

 按钮的容器是一个div。div具有oe_button_box样式以及使其靠表右侧对齐的oe_right样式。我们将在后边章节进一步介绍按钮,学习添加按钮到按钮箱中。

对表单中的内容进行分组

 表单的主要内容应该使用<group>标签组织,group标记在画布中插入两列,其中的字段标签默认会被展示。字段值、字段标签需要两列,所以在一个组添加字段将垂直叠放。如果我们将两个<group>元素置于一个顶部group中,我们能够得到两列并排的字段标签。
 继续我们的表单视图,我们将在智能按钮箱后边添加主要内容。

<group name="group_top"> <group name="group_left"> <field name="date_deadline" /> <separator string="Reference" /> <field name="refers_to" /> </group> <group name="group_right"> <field name="tag_ids" widget="many2many_tags"/> </group> </group>

 这是一个很好的做法,分配一个名称给组标签,以便它更容易后期被引用并扩展视图(由您或其他开发人员)。字符串属性也是允许的,如果设置,则用于显示节标题。在一个组内,<newline>将强制生成一个新行。下一个元素将在组的第一列中呈现。附加部分标题可以使用<separator>元素添加到组内。

提示

 从开发者菜单选项切换表单布局,它绘制了每个组的边框线,以便更好地了解当前表单布局。

使用col和colspan属性,我们可以更好的控制组元素布局。col属性可以指定组中包含的列数,默认值是2,它也可以改为任何数字。双数的效果更好,因为每一个字段加起来都要两列,用于标签加字段值。组内元素,包括<filed>元素,可以使用colspan属性设置一个特定的列数,默认都是一列。

标签笔记本

 组织内容的另一种方法是使用笔记本元素,包含多个标签的部分,称为页面。这样可以实现较少使用的数据给予隐藏,或者按照标题组织大量数据。

我们不需要把这个添加到我们的to_do表单中,但这里有一个例子 可以添加到任务台窗体。 <notebook> <page string="Whiteboard" name="whiteboard"> <field name="docs" /> </page> <page> </page> </notebook>

查看语义组件

字段

字段的标签

关系字段

字段小部件

按钮

智能按钮

动态视图

更改事件

动态属性

列表视图

搜索视图

日历视图

图形和枢轴视图

其他视图类型

第六章 小结

第七章 ORM应用逻辑 - 支持业务流程

创建向导

向导模型

向导窗体

向导业务逻辑

记录

提出异常

向导中的助手操作

使用ORM API

方法装饰器

覆盖ORM默认方法

RPC和Web客户端调用的方法

shell命令

服务器环境

修改执行环境

事务和低级SQL

使用记录集

查询模型

单身人士

写在记录上

使用时间和日期

对记录集的操作

操作记录集

使用关系字段

使用关系字段

==第七章 小结==