“首页”的版本间的差异

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索
向导业务逻辑
Odoo中文版技术书籍项目
(未显示3个用户的26个中间版本)
第13行: 第13行:
 
##*01.广州-唐振宽(稿件初审) 02.广州-黄伟杰(任务分派) 03.广州-彭  明(进度跟踪)
 
##*01.广州-唐振宽(稿件初审) 02.广州-黄伟杰(任务分派) 03.广州-彭  明(进度跟踪)
 
##审核:  
 
##审核:  
##*01.苏州-刘春涛(chinamaker)
+
##*01.苏州-刘春涛([http://www.chinamaker.net chinamaker])
 
##成员:
 
##成员:
 
:::::{|class="wikitable"
 
:::::{|class="wikitable"
第39行: 第39行:
 
| 17.武汉-周传红
 
| 17.武汉-周传红
 
| 18.福州- 南湘子
 
| 18.福州- 南湘子
|
+
| 19.北京-生东击西
|
+
| 20.杭州-Chevrolet
 
|}
 
|}
  
第251行: 第251行:
 
==[[创建向导]]==
 
==[[创建向导]]==
 
===[[向导模型]]===
 
===[[向导模型]]===
 
向导显示窗体视图向用户,通常作为一个对话框窗口,某些字段必须填写。这些然后会利用向导逻辑。
 
这实施使用相同的模型/视图体系结构对于常规视图,但支持模型基于 models.TransientModel 而不是models.Model.
 
这种类型的模型还具有数据库的代表性和存储状态存在,但这一数据预计将是有用的只是直到向导完成其工作。计划的作业定期清理向导数据库表中的旧数据。
 
models/todo_wizard_model.py文件将定义的字段,我们需要与用户进行交互︰ 要更新的任务清单,用户负责和期限日期来设置它们。
 
首先添加 models/__init__.py文件,写下面的代码行︰from .import todo_wizard_model
 
然后创建实际models/todo_wizard_model.py文件︰
 
 
#-*- coding︰ utf-8 -*-
 
from odoo import models,fields,api
 
class TodoWizard(models.TransientModel):
 
_name = 'todo.wizard'
 
_description = 'To-do Mass Assignment'
 
task_ids = fields.Many2many('todo.task', string='Tasks')
 
new_deadline = fields.Date('Deadline to Set')
 
new_user_id = fields.Many2one(
 
'res.users',string='Responsible to Set')
 
 
使用常规模型一对多关系时,不应在瞬态模型,它是值得的。为此原因是它需要常规模型有瞬态模型,但不允许反转的多对一关系,因为可能随着瞬态记录需要收集垃圾常规模型。
 
  
 
===[[向导窗体]]===
 
===[[向导窗体]]===
向导窗体视图是相同的常规模型,除了两个具体因素︰
 
A< footer >节可以用于放置动作按钮
 
一种特殊type ="cancel"按钮可用于中断不执行任何操作向导
 
这是我们的内容views/todo_wizard_view.xml文件︰
 
<odoo>
 
    <record id="To-do Task Wizard" model="ir.ui.view">
 
        <field name="name">To-do Task Wizard</field>
 
        <field name="model">todo.wizard</field>
 
        <field name="arch" type="xml">
 
            <form>
 
                <div class="oe_right">
 
                    <button type="object" name="do_count_tasks"
 
                            string="Count"/>
 
                    <button type="object" name="do_populate_tasks"
 
                            string="Get All"/>
 
                </div>
 
                <field name="task_ids">
 
                    <tree>
 
                        <field name="name"/>
 
                        <field name="user_id"/>
 
                        <field name="date_deadline"/>
 
                    </tree>
 
                </field>
 
                <group>
 
                    <group>
 
                        <field name="new_user_id"/>
 
                    </group>
 
                    <group>
 
                        <field name="new_deadline"/>
 
                    </group>
 
                </group>
 
                <footer>
 
                    <button type="object" name="do_mass_update"
 
                            string="Mass Update" class="oe_highlight"
 
                            attrs="{'invisible':
 
[('new_deadline','=',False),
 
('new_user_id', '=',False)]
 
}"/>
 
                    <button special="cancel" string="Cancel"/>
 
                </footer>
 
            </form>
 
        </field>
 
    </record>
 
    227<!-- More button Action -->
 
    <act_window id="todo_app.action_todo_wizard"
 
                name="To-Do Tasks Wizard"
 
                src_model="todo.task" res_model="todo.wizard"
 
                view_mode="form" target="new" multi="True"/>
 
</odoo>
 
 
 
在 XML 中我们看到<act_window>窗口,将选项添加到 To-do Task窗体的多个按钮,通过使用src_model属性。target ="new" 属性做为一个对话框窗口打开。
 
你可能也注意到attrs用于更新模块列表按钮,直到选择新的截止日期或负责任的用户选择更新后才能可见。
 
  
 
===[[向导业务逻辑]]===
 
===[[向导业务逻辑]]===
接下来,我们需要实现对窗体按钮执行的操作。排除Cancel按钮,我们有三个操作按钮来实现,但现在我们将专注于Mass Update按钮。
 
通过按钮调用的方法是do_mass_update和它应该被定义在models/todo_wizard_model.py文件,如下面的代码所示︰
 
 
from odoo import exceptions
 
import logging
 
 
_logger = logging.getLogger(__name__)
 
 
 
<nowiki># ...</nowiki>
 
<nowiki># class TodoWizard(models.TransientModel):</nowiki>
 
<nowiki># ...</nowiki>
 
 
@api.multi
 
def do_mass_update(self):
 
 
 
    self.ensure_one()
 
if not (self.new_deadline or self.new_user_id):
 
    raise exceptions.ValidationError('No data to update!')
 
_logger.debug('Mass update on Todo Tasks %s',
 
              self.task_ids.ids)
 
vals = {}
 
if self.new_deadline:
 
    vals['date_deadline'] = self.new_deadline
 
if self.new_user_id:
 
    vals['user_id'] = self.new_user_id
 
<nowiki># Mass write values on all selected tasks</nowiki>
 
if vals:
 
    self.task_ids.write(vals)
 
return True
 
 
 
我们的代码应该处理一次,所以我们用一个向导实例self.ensure_one()要明确指出这一点。在这里 self表示向导窗体上的数据的浏览记录。
 
该方法通过验证如果新的截止日期或负责用户被给出,并将引发错误,如果不开始。接下来,我们有如何调试消息写入服务器日志的示例。
 
然后vals要设置与大规模更新的值与建立字典︰ 新的日期,新负责,或两者。然后write方法来执行大规模的更新。这是一个循环,在每个记录上执行单个写入效率更高。
 
是一个好的做法,方法总是返回一些内容。这就是为什么它返回True的值就结束了。唯一的理由是,XML-RPC 协议不支持无值,所以这些方法不会可使用该协议。在实践中,你可能不知道的问题因为 web 客户端使用 JSON RPC,没有 XML-RPC,但它仍是一个好的习惯,效仿。
 
接下来,我们会仔细看看日志记录,工作,然后会在顶部的两个按钮背后的逻辑︰Count和Get All.
 
  
 
===[[记录]]===
 
===[[记录]]===
===[[提出异常]]===
+
===[[抛出异常]]===
 +
 
 
===[[向导中的助手操作]]===
 
===[[向导中的助手操作]]===
  
 
==[[使用ORM API]]==
 
==[[使用ORM API]]==
===[[方法装饰器]]===
+
===[[装饰器方法]]===
===[[覆盖ORM默认方法]]===
+
 
 +
===[[重写 ORM 的默认方法]]===
 +
 
 
===[[RPC和Web客户端调用的方法]]===
 
===[[RPC和Web客户端调用的方法]]===
 
===[[shell命令]]===
 
===[[shell命令]]===
 
===[[服务器环境]]===
 
===[[服务器环境]]===
 
===[[修改执行环境]]===
 
===[[修改执行环境]]===
===[[事务和低级SQL]]===
+
===[[事务和底层SQL]]===
  
 
==[[使用记录集]]==
 
==[[使用记录集]]==
 
===[[查询模型]]===
 
===[[查询模型]]===
===[[单身人士]]===
+
===[[单例模式]]===
 +
 
 
===[[写在记录上]]===
 
===[[写在记录上]]===
 
===[[使用时间和日期]]===
 
===[[使用时间和日期]]===
第387行: 第281行:
 
===[[操作记录集]]===
 
===[[操作记录集]]===
 
===[[使用关系字段]]===
 
===[[使用关系字段]]===
===[[使用关系字段]]===
+
===[[处理关系字段]]===
  
 
==[[第七章 小结]]==
 
==[[第七章 小结]]==
 +
 +
 +
=[[第八章 编写测试和调试代码]]=
 +
 +
==[[单元测试]]==
 +
 +
==[[添加单元测试]]==
 +
 +
==[[写测试用例]]==
 +
 +
==[[设置测试]]==
 +
 +
==[[测试异常]]==
 +
 +
==[[运行测试]]==
 +
 +
==[[关于YAML测试]]==
 +
 +
==[[开发工具]]==
 +
===[[服务器开发选项]]===
 +
===[[调试]]===
 +
====[[Python调试器]]====
 +
====[[示例调试会话]]====
 +
====[[替代Python调试器]]====
 +
====[[打印消息和记录]]====
 +
===[[检查运行过程]]===
 +
 +
==[[第八章 小结]]==
 +
 +
 +
=[[第九章 QWeb和Kanban视图]]=
 +
 +
==[[关于Kanban]]==
 +
===[[Kanban视图]]===
 +
 +
==[[设计Kanban视图]]==
 +
===[[优先级,Kanban状态和颜色]]===
 +
===[[Kanban卡元素]]===
 +
===[[Kanban卡布局]]===
 +
===[[添加Kanban卡选项菜单]]===
 +
===[[Kanban视图中的动作]]===
 +
 +
==[[QWeb模板语言]]==
 +
===[[QWeb JavaScript评估上下文]]===
 +
===[[使用t-attf进行属性字符串替换]]===
 +
===[[使用t-att作为动态属性]]===
 +
===[[使用t-foreach循环]]===
 +
===[[使用t-if进行条件渲染]]===
 +
===[[使用t-esc和t-raw来渲染值]]===
 +
===[[使用t-set设置变量的值]]===
 +
===[[使用t-call插入其他模板]]===
 +
===[[更多的方法来使用t-attf]]===
 +
 +
==[[Kanban视图的继承]]==
 +
 +
==[[自定义CSS和JavaScript]]==
 +
 +
==[[第九章 小结]]==
 +
 +
 +
=[[第十章 创建QWeb报告]]=
 +
==[[安装wkhtmltopdf]]==
 +
==[[创建业务报告]]==
 +
==[[QWeb报告模板]]==
 +
==[[在报告中提供数据]]==
 +
==[[渲染图像]]==
 +
==[[总计摘要和运行总计]]==
 +
==[[定义纸张格式]]==
 +
==[[在报告中启用语言翻译]]==
 +
==[[基于自定义SQL的报表]]==
 +
==[[第十章 小结]]==
 +
 +
 +
=[[第十一章 创建网站前端功能]]=
 +
 +
==[[路线图]]==
 +
 +
==[[我们的第一个网页]]==
 +
===[[Hello World!]]===
 +
===[[Qweb模板的Hello World!]]===
 +
===[[扩展Web功能]]===
 +
===[[HelloCMS!]]===
 +
 +
==[[建设网站]]==
 +
===[[添加CSS和JavaScript]]===
 +
===[[待办事项列表控制器]]===
 +
===[[待办事项列表模板]]===
 +
===[[待办事宜任务详细信息页面]]===
 +
 +
==[[网站表单]]==
 +
===[[表单页面]]===
 +
===[[访问安全和菜单项]]===
 +
===[[添加自定义逻辑]]===
 +
 +
==[[第十一章 小结]]==
 +
 +
 +
=[[第十二章 外部API - 与其他系统集成]]=
 +
 +
==[[设置一个Python客户端]]==
 +
 +
==[[使用XML-RPC调用Odoo API]]==
 +
 +
===[[打开XML-RPC连接]]===
 +
===[[从服务器读取数据]]===
 +
===[[调用其他方法]]===
 +
 +
==[[编写Notes桌面应用程序]]==
 +
===[[Odoo的通信层]]===
 +
===[[创建GUI]]===
 +
 +
==[[介绍ERPpeek客户端]]==
 +
===[[ERPpeek API]]===
 +
===[[ERPpeek CLI]]===
 +
 +
==[[第十二章 小结]]==
 +
 +
 +
=[[第十三章 部署清单 - 直播]]=
 +
==[[可用的预构建软件包]]==
 +
 +
==[[安装依赖关系]]==
 +
===[[准备专用系统用户]]===
 +
===[[从源代码安装]]===
 +
===[[设置配置文件]]===
 +
 +
==[[多线程操作]]==
 +
===[[设置系统服务]]===
 +
===[[创建systemd服务]]===
 +
===[[创建Upstart/sysvinit服务]]===
 +
===[[用命令行检查Odoo服务]]===
 +
 +
==[[使用反向代理]]==
 +
===[[设置Nginx反向代理]]===
 +
===[[执行HTTPS]]===
 +
===[[Nginx优化]]===
 +
===[[Long polling]]===
 +
 +
==[[服务器和模块更新]]==
 +
 +
==[[第十三章 小结]]==

2017年8月9日 (三) 18:13的版本

目录

Odoo 大V社概况

Odoo 大V社成员来自五湖四海,他们热爱开源,无私奉献,甘于把自己的业余时间投入到公益的 Odoo 相关资料的整理中去,
为 Odoo 在中国区的推广无私奉献。

  • odoo 中文书籍交流群:343593855(验证信息:参与odoo中文书籍编写), 不参加书籍编写勿加
  • odoo 实施定制交流群:446389096(验证信息:odoo 实施), 开发实施定制交流的加这个群

Odoo中文版技术书籍项目

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

前言

第一章 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文件定义用户界面

菜单项

窗口动作

上下文和域

上下文数据

域表达式

窗体视图

处理同一类型的几个视图

业务文档视图

header头部

sheet工作表

标题和副标题

智能按钮区域

对表单中的内容进行分组

标签笔记本

查看语义组件

字段

字段的标签

关系字段

字段小部件

按钮

智能按钮

动态视图

动态属性

列表视图

搜索视图

日历视图

图形和枢轴视图

其他视图类型

第六章 小结

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

创建向导

向导模型

向导窗体

向导业务逻辑

记录

抛出异常

向导中的助手操作

使用ORM API

装饰器方法

重写 ORM 的默认方法

RPC和Web客户端调用的方法

shell命令

服务器环境

修改执行环境

事务和底层SQL

使用记录集

查询模型

单例模式

写在记录上

使用时间和日期

对记录集的操作

操作记录集

使用关系字段

处理关系字段

第七章 小结

第八章 编写测试和调试代码

单元测试

添加单元测试

写测试用例

设置测试

测试异常

运行测试

关于YAML测试

开发工具

服务器开发选项

调试

Python调试器

示例调试会话

替代Python调试器

打印消息和记录

检查运行过程

第八章 小结

第九章 QWeb和Kanban视图

关于Kanban

Kanban视图

设计Kanban视图

优先级,Kanban状态和颜色

Kanban卡元素

Kanban卡布局

添加Kanban卡选项菜单

Kanban视图中的动作

QWeb模板语言

QWeb JavaScript评估上下文

使用t-attf进行属性字符串替换

使用t-att作为动态属性

使用t-foreach循环

使用t-if进行条件渲染

使用t-esc和t-raw来渲染值

使用t-set设置变量的值

使用t-call插入其他模板

更多的方法来使用t-attf

Kanban视图的继承

自定义CSS和JavaScript

第九章 小结

第十章 创建QWeb报告

安装wkhtmltopdf

创建业务报告

QWeb报告模板

在报告中提供数据

渲染图像

总计摘要和运行总计

定义纸张格式

在报告中启用语言翻译

基于自定义SQL的报表

第十章 小结

第十一章 创建网站前端功能

路线图

我们的第一个网页

Hello World!

Qweb模板的Hello World!

扩展Web功能

HelloCMS!

建设网站

添加CSS和JavaScript

待办事项列表控制器

待办事项列表模板

待办事宜任务详细信息页面

网站表单

表单页面

访问安全和菜单项

添加自定义逻辑

第十一章 小结

第十二章 外部API - 与其他系统集成

设置一个Python客户端

使用XML-RPC调用Odoo API

打开XML-RPC连接

从服务器读取数据

调用其他方法

编写Notes桌面应用程序

Odoo的通信层

创建GUI

介绍ERPpeek客户端

ERPpeek API

ERPpeek CLI

第十二章 小结

第十三章 部署清单 - 直播

可用的预构建软件包

安装依赖关系

准备专用系统用户

从源代码安装

设置配置文件

多线程操作

设置系统服务

创建systemd服务

创建Upstart/sysvinit服务

用命令行检查Odoo服务

使用反向代理

设置Nginx反向代理

执行HTTPS

Nginx优化

Long polling

服务器和模块更新

第十三章 小结