查看“首页”的源代码
←
首页
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看并复制此页面的源代码:
== '''Odoo 大V社概况''' == Odoo 大V社成员来自五湖四海,他们热爱开源,无私奉献,甘于把自己的业余时间投入到公益的 Odoo 相关资料的整理中去,<br> 为 Odoo 在中国区的推广无私奉献。<br> *odoo 中文书籍交流群:343593855(验证信息:参与odoo中文书籍编写), 不参加书籍编写勿加 *odoo 实施定制交流群:446389096(验证信息:odoo 实施), 开发实施定制交流的加这个群 ==='''Odoo中文版技术书籍项目'''=== #项目一期目标: Odoo 中文开发手册 #项目性质:公益,保留所有参与人员的署名权;项目成果归全人类 #项目使命:Odoo 中文书籍编写整理,推倒 odoo 语言壁垒,助力 odoo 中国推广 #项目成员: ##统筹: ##*01.广州-唐振宽(稿件初审) 02.广州-黄伟杰(任务分派) 03.广州-彭 明(进度跟踪) ##审核: ##*01.苏州-刘春涛(chinamaker) ##成员: :::::{|class="wikitable" |- | 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文件︰ <nowiki> #-*- 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') </nowiki> 使用常规模型一对多关系时,不应在瞬态模型,它是值得的。为此原因是它需要常规模型有瞬态模型,但不允许反转的多对一关系,因为可能随着瞬态记录需要收集垃圾常规模型。 ===[[向导窗体]]=== 向导窗体视图是相同的常规模型,除了两个具体因素︰ A< footer >节可以用于放置动作按钮 一种特殊type ="cancel"按钮可用于中断不执行任何操作向导 这是我们的内容views/todo_wizard_view.xml文件︰ <nowiki> <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> </nowiki> 在 XML 中我们看到<act_window>窗口,将选项添加到 To-do Task窗体的多个按钮,通过使用src_model属性。target ="new" 属性做为一个对话框窗口打开。 你可能也注意到attrs用于更新模块列表按钮,直到选择新的截止日期或负责任的用户选择更新后才能可见。 ===[[向导业务逻辑]]=== 接下来,我们需要实现对窗体按钮执行的操作。排除Cancel按钮,我们有三个操作按钮来实现,但现在我们将专注于Mass Update按钮。 通过按钮调用的方法是do_mass_update和它应该被定义在models/todo_wizard_model.py文件,如下面的代码所示︰ <nowiki> 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 </nowiki> 我们的代码应该处理一次,所以我们用一个向导实例self.ensure_one()要明确指出这一点。在这里 self表示向导窗体上的数据的浏览记录。 该方法通过验证如果新的截止日期或负责用户被给出,并将引发错误,如果不开始。接下来,我们有如何调试消息写入服务器日志的示例。 然后vals要设置与大规模更新的值与建立字典︰ 新的日期,新负责,或两者。然后write方法来执行大规模的更新。这是一个循环,在每个记录上执行单个写入效率更高。 是一个好的做法,方法总是返回一些内容。这就是为什么它返回True的值就结束了。唯一的理由是,XML-RPC 协议不支持无值,所以这些方法不会可使用该协议。在实践中,你可能不知道的问题因为 web 客户端使用 JSON RPC,没有 XML-RPC,但它仍是一个好的习惯,效仿。 接下来,我们会仔细看看日志记录,工作,然后会在顶部的两个按钮背后的逻辑︰Count和Get All. ===[[记录]]=== ===[[提出异常]]=== ===[[向导中的助手操作]]=== ==[[使用ORM API]]== ===[[方法装饰器]]=== ===[[覆盖ORM默认方法]]=== ===[[RPC和Web客户端调用的方法]]=== ===[[shell命令]]=== ===[[服务器环境]]=== ===[[修改执行环境]]=== ===[[事务和低级SQL]]=== ==[[使用记录集]]== ===[[查询模型]]=== ===[[单身人士]]=== ===[[写在记录上]]=== ===[[使用时间和日期]]=== ===[[对记录集的操作]]=== ===[[操作记录集]]=== ===[[使用关系字段]]=== ===[[使用关系字段]]=== ==[[第七章 小结]]==
返回至
首页
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
odoo 中文开发手册
odoo 开发参考
odoo 实施笔记
Odoo 最佳方案
关于 OdooV
Odoo FAQ
工具
链入页面
相关更改
特殊页面
页面信息
友情链接
odoo官网
odoo中文网
odoo实施