“首页”的版本间的差异

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索
向导窗体
向导窗体
第312行: 第312行:
 
         </field>
 
         </field>
 
     </record>
 
     </record>
     227<!-- More button Action -->
+
     <!-- More button Action -->
 
     <act_window id="todo_app.action_todo_wizard"
 
     <act_window id="todo_app.action_todo_wizard"
 
                 name="To-Do Tasks Wizard"
 
                 name="To-Do Tasks Wizard"

2017年5月5日 (五) 10:41的版本

目录

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. 审核:
      • 01.苏州-刘春涛(chinamaker)
    3. 成员:
01.苏州时 威 02.苏州庄春梅 03.杭州胡 恒 04.广州陈厚源
05. 06.苏州孙保锁 07.成都曾发军 08.深圳季蜗牛
09.北京乔明洋 10.香港胡sir 11.上海高守庆 12.上海赵祥涛
13.上海罗英川布 14.台北蘇sir 15.苏州-n37r06u3 16.石家庄-leo
17.武汉-周传红 18.福州- 南湘子

前言

第一章 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应用逻辑 - 支持业务流程

创建向导

向导模型

向导显示窗体视图向用户,通常作为一个对话框窗口,某些字段必须填写。这些然后会利用向导逻辑。 这实施使用相同的模型/视图体系结构对于常规视图,但支持模型基于 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>
    <!-- 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__)


# ... # class TodoWizard(models.TransientModel): # ...

@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

# Mass write values on all selected tasks 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默认方法

RPC和Web客户端调用的方法

shell命令

服务器环境

修改执行环境

事务和低级SQL

使用记录集

查询模型

单身人士

写在记录上

使用时间和日期

对记录集的操作

操作记录集

使用关系字段

使用关系字段

第七章 小结