├── README.md ├── reference ├── actions.md ├── command-line-interface-odoo-bin.md ├── data-files.md ├── javascript-cheatsheet.md ├── javascript-reference.md ├── mixins-classes.md ├── mobile-javascript.md ├── module-manifests.md ├── odoo-guidelines.md ├── orm-api.md ├── qweb-reports.md ├── qweb.md ├── security-odoo.md ├── testing-odoo.md ├── translating-modules.md ├── views.md └── web-controllers.md ├── setting-up ├── community-enterprise.md ├── deploying-content-delivery-networks.md ├── deploying-odoo.md ├── email-gateway.md ├── installing-odoo.md └── updating-odoo-installation.md ├── tutorials ├── building-module.md ├── building-website.md ├── customizing-web-client.md ├── profiling-odoo-code.md └── theme-tutorial.md └── web-services ├── creating-localization.md ├── database-upgrade.md ├── external-api.md └── in-app-purchase.md /README.md: -------------------------------------------------------------------------------- 1 | # Odoo 官方文档之开发者文档 2 | 3 | ## Tutorials 4 | 5 | - [主题教程](tutorials/theme-tutorial.md) 6 | - [建造网站](tutorials/building-website.md) 7 | - [构建模块](tutorials/building-module.md) 8 | - [自定义网页客户端](tutorials/customizing-web-client.md) 9 | - [Odoo 代码性能测试](tutorials/profiling-odoo-code.md) 10 | 11 | ## Web Services 12 | 13 | - [外部API](https://alanhou.org/odoo-13-external-api/) 14 | - [应用内购买](https://alanhou.org/odoo-13-in-app-purchase/) 15 | - [数据库升级](https://alanhou.org/odoo-13-database-upgrade/) 16 | - [会计本地化](https://alanhou.org/odoo-13-creating-localization/) 17 | 18 | ## Setting Up 19 | 20 | - [安装Odoo](https://alanhou.org/odoo-13-installing-odoo/) 21 | - [部署Odoo](https://alanhou.org/odoo-13-deploying-odoo/) 22 | - [更新Odoo安装版本](https://alanhou.org/odoo-13-updating-odoo-installation/) 23 | - [使用 CDN(内容分发网络)部署](https://alanhou.org/odoo13-deploying-content-delivery-networks/) 24 | - [社区版转企业版](https://alanhou.org/odoo-13-community-enterprise/) 25 | - [Odoo email 网关](https://alanhou.org/odoo-13-email-gateway/) 26 | 27 | ## Reference 28 | 29 | - [ORM API](https://alanhou.org/odoo-13-orm-api/) 30 | - [数据文件](https://alanhou.org/odoo-13-data-files/) 31 | - [动作](https://alanhou.org/odoo-13-actions/) 32 | - [视图](https://alanhou.org/odoo-13-views/) 33 | - [模块声明文件](https://alanhou.org/odoo-13-module-manifests/) 34 | - [命令行接口:odoo-bin](https://alanhou.org/odoo-13-command-line-interface-odoo-bin/) 35 | - [Odoo中的安全](https://alanhou.org/odoo-13-security-odoo/) 36 | - [测试Odoo](https://alanhou.org/odoo-13-testing-odoo/) 37 | - [网页控制器](https://alanhou.org/odoo-13-web-controllers/) 38 | - [QWeb](https://alanhou.org/odoo-13-qweb/) 39 | - [Javascript速查](https://alanhou.org/odoo-13-javascript-cheatsheet/) 40 | - [Javascript手册](https://alanhou.org/odoo-13-javascript-reference/) 41 | - [模块翻译](https://alanhou.org/odoo-13-translating-modules/) 42 | - [QWeb报表](https://alanhou.org/odoo-13-qweb-reports/) 43 | - [Mixins和有用的类](https://alanhou.org/odoo-13-mixins-classes/) 44 | - [Odoo代码指南](https://alanhou.org/odoo-13-odoo-guidelines/) 45 | - [移动端JavaScript](https://alanhou.org/odoo-13-mobile-javascript/) -------------------------------------------------------------------------------- /reference/actions.md: -------------------------------------------------------------------------------- 1 | # 动作 2 | 3 | - 本文来自[Odoo 13官方文档之开发者文档](../README.md)系列文章 4 | 5 | 动作定义对应用户动作的系统行为:登录、动作按钮、发票选取 … 动作可存储在数据库中或直接返回如按钮方法的字典。所有的动作有两个必选属性: 6 | 7 | - `type` 8 | 9 | 当前动作的分类,定义可使用哪些字段以及如何解析动作 10 | 11 | - `name` 12 | 13 | 针对动作的用户可读的简短描述,可在客户端界面中显示 14 | 15 | - `binding_model_id` 16 | 17 | 若进行设置,在给定模型的动作栏中的可用动作对于服务端动作,使用 `model_id`。 18 | 19 | 客户端可以获取4种形式的动作: 20 | 21 | - - `False` 22 | 23 | 若当前有动作对话框处于打开状态,进行关闭 24 | 25 | - - 字符串 26 | 27 | 若匹配 [客户端动作](#reference-actions-client),解析为客户端动作标签,否则视为数字 28 | 29 | - - 数字 30 | 31 | 读取数据库中的相应动作记录,可为数据库标识符或 [外部id](https://www.odoo.com/documentation/13.0/glossary.html#term-external-id) 32 | 33 | - - 字典 34 | 35 | 视为客户端描述符并执行 36 | 37 | ## 绑定 38 | 39 | 除两个必选属性外,所有的动作还可以有用于在任意模型的上下文菜单中展示动作的*可选*属性: 40 | 41 | - `binding_model_id` 42 | 43 | 指定动作所绑定的模型 44 | 45 | - `binding_type` 46 | 47 | 指定所绑定的类型,大多为动作出现在哪个上下文菜单之下`action` (默认)指定动作会出现在绑定模型Action上下文菜单中。`report`指定动作会出现在所绑定模型的Print上下文菜单中 48 | 49 | - `binding_view_types` 50 | 51 | 视图的逗号分隔列表,其中动作出现在上下文菜单中,大部分“列表”及/或“表单”。默认为`list,form` (列表及表单) 52 | 53 | 54 | 55 | ## 窗口动作(`ir.actions.act_window`) 56 | 57 | 大部分常用动作类型,用于展示通过[视图](https://alanhou.org/odoo-13-views/#reference-views)的模型可视化:定义一组视图类型的模型(可能为模型的指定记录)窗口动作 (及可能的指定视图) f 58 | 59 | 其字段有: 60 | 61 | - `res_model` 62 | 63 | 用于展示视图的模型 64 | 65 | - `views` 66 | 67 | `(view_id, view_type)` 对的列表。每组的第二个元素是视图的分类 (tree, form, graph, …) ,第一个是可选的数据库 id (或 `False`)。若未提供 id,客户端应获取对所请求模型指定类型的默认视图(默认通过[`fields_view_get()`](https://alanhou.org/odoo-13-orm-api/#odoo.models.Model.fields_view_get)来实现). 列表的第一个类型是默认视图类型列表,在动作执行时会默认打开。每个视图类型在列表中最多出现一次。 68 | 69 | - `res_id` (可选) 70 | 71 | 若默认视图为 `form`,指定要加载的记录(否则应创建一条新记录) 72 | 73 | - `search_view_id` (可选) 74 | 75 | `(id, name)` 对, `id` 为针对动作所加载的指定搜索视图的数据库标识符。默认获取模型的默认搜索视图 76 | 77 | - `target` (可选) 78 | 79 | 是否应在主内容区 (`current`)中以全屏模式(`fullscreen`)或对话框/弹窗(`new`)中打开视图。使用 `main` 代替 `current` 来清除面包屑导航。默认为`current`。 80 | 81 | - `context` (可选) 82 | 83 | 传递给视图的额外上下文数据 84 | 85 | - `domain` (可选) 86 | 87 | 隐式添加给所有视图搜索查询的过滤作用域 88 | 89 | - `limit` (可选) 90 | 91 | 默认在列表中显示的记录数。在网页客户端中默认为80 92 | 93 | 例如,要通过列表及表单视图打开客户 (配合 `customer` 标记集) : 94 | 95 | ``` 96 | { 97 | "type": "ir.actions.act_window", 98 | "res_model": "res.partner", 99 | "views": [[False, "tree"], [False, "form"]], 100 | "domain": [["customer", "=", true]], 101 | } 102 | ``` 103 | 104 | 或在新对话框中打开指定产品(单独获取)的表单视图: 105 | 106 | ``` 107 | { 108 | "type": "ir.actions.act_window", 109 | "res_model": "product.product", 110 | "views": [[False, "form"]], 111 | "res_id": a_product_id, 112 | "target": "new", 113 | } 114 | ``` 115 | 116 | 数据库中的窗口动作有一些应由客户端忽略的不同字段,大多数用于组成`views` 列表: 117 | 118 | - `view_mode` (默认= `tree,form` ) 119 | 120 | 视图类型的逗号分隔列表作为字符串(/!\ 无空格 /!\)。所有这些类型会在生成的`views` 列表中出现 (至少有一个`False` view_id) 121 | 122 | - `view_ids` 123 | 124 | M2M[1](#notquitem2m) 的视图对象,定义 `views`的初始内容Act_window视图也可通过`ir.actions.act_window.view`清晰地定义。如果你打算允许模型的多个视图,推荐使用ir.actions.act_window.view 而不是动作 `view_ids`` tree ` 125 | 126 | - `view_id` 127 | 128 | 在类型是`view_mode`列表的一部分且没有由`view_ids`中的视图进行填充时,添加到 `views` 中的指定视图 129 | 130 | These are mostly used when defining actions from这些大多在 [数据文件](https://www.odoo.com/documentation/13.0/reference/data.html#reference-data)中定义动作时使用: 131 | 132 | ``` 133 | 134 | A Test Action 135 | some.model 136 | graph 137 | 138 | 139 | ``` 140 | 141 | 即使不是模型的默认视图,也将使用“my_specific_view”视图。 142 | 143 | 服务端的 `views` 序列的组合如下: 144 | 145 | - 通过 `view_ids` 获取每个`(id, type)`(通过`sequence`排序) 146 | - 若定义了 `view_id` 且未填充其类型,追加其 `(id, type)` 147 | - 对每个 `view_mode`中未填充的类型,追加 `(False, type)` 148 | 149 | [[1\]](#id1) 技术上不是 M2M: 添加序列字段及可能只由视图类型组成,不带有视图id。 150 | 151 | 152 | 153 | ## URL动作 (`ir.actions.act_url`) 154 | 155 | (website/web page) via an 允许Odoo动作打开URL(网站/网页)。可由两个字段进行自定义: 156 | 157 | - `url` 158 | 159 | 在激活动作时打开的地址 160 | 161 | - `target` 162 | 163 | 若为 `new`在新窗口/页面打开该地址,若为 `self`使用该页面替换当前内容。默认值为 `new` 164 | 165 | ``` 166 | { 167 | "type": "ir.actions.act_url", 168 | "url": "https://odoo.com", 169 | "target": "self", 170 | } 171 | ``` 172 | 173 | 将使用Odoo首页替换当前内容版块。 174 | 175 | 176 | 177 | ## 服务端动作 (`ir.actions.server`) 178 | 179 | ###### `*class* odoo.addons.base.models.ir_actions.IrActionsServer(*pool*, *cr*)` 180 | 181 | 服务端动作模型。服务端动作在基模型上运作并且提供种类可自动执行的动作类型,例如,手动通过在 More 上下文菜单中添加动作来使用基动作规则。 182 | 183 | 从Odoo 8.0开始,在动作表单视图中出现了‘Create Menu Action’按钮。它在基模型的More菜单中创建一个入口。这允许在界面中创建服务端动作并以批量模式进行运行。 184 | 185 | 可以使用的动作有: 186 | 187 | - ‘Execute Python Code’: 将会执行的 Python 代码块 188 | - ‘Create a new Record’: 使用新值新建记录 189 | - ‘Write on a Record’: 更新记录值 190 | - ‘Execute several actions’: 定义触发一些其它服务端动作的动作 191 | 192 | 允许通过任意有效动作位置触发复杂服务端代码。仅有两个字段与客户端相关: 193 | 194 | - `id` 195 | 196 | 待运行服务端动作的数据库中的标识符 197 | 198 | - `context` (可选) 199 | 200 | 在运行服务端动作时使用的上下文数据 201 | 202 | In-database records 数据库中的记录很明显的更丰富并可执行一些基于它们的`state`的特定或通用动作。一些字段 (及相应行为) 在状态之间进行分享: 203 | 204 | - `model_id` 205 | 206 | 链接到动作的Odoo模型。 207 | 208 | ``` 209 | state 210 | ``` 211 | 212 | - `code`: 执行通过`code` 参数给定的python代码。 213 | - `object_create`: 根据`fields_lines` 规格新建`crud_model_id`模型的记录。 214 | - `object_write`: 按照`fields_lines` 规格更新当前记录。 215 | - `multi`: 执行通过`child_ids` 参数给定的一些动作。 216 | 217 | ### 状态字段 218 | 219 | 根据其状态通过不同的字段来定义行为。相关的状态在每个字段后给出。 220 | 221 | - `code` (代码) 222 | 223 | 指定调用动作时所要执行的Python代码块` Res Partner Server Action raise Warning(record.name) `代码块中可定义`action`的变量,它将以要执行的下一个动作返回客户端:` Res Partner Server Action if record.some_condition(): action = { "type": "ir.actions.act_window", "view_mode": "form", "res_model": record._name, "res_id": record.id, } `会要求客户端在满足某些条件时打开记录的表单 224 | 225 | - `crud_model_id` (创建)(必传) 226 | 227 | 新建记录的所在模型 228 | 229 | - `link_field_id` (创建) 230 | 231 | `ir.model.fields`的many2one关联,指定当前记录的m2o字段,在其中应设置新创建字段(模型应匹配) 232 | 233 | - `fields_lines` (创建/写入) 234 | 235 | 在创建或拷贝记录时重载的字段。与字段的关联为 [`One2many`](https://alanhou.org/odoo-13-orm-api/#odoo.fields.One2many):`col1`在相关模型中设置`ir.model.fields` (`crud_model_id` 用于创建, `model_id` 用于更新)`value`字段的值,通过 `type`解析`type` (value|reference|equation)若为 `value`, `value` 字段解析为字面量值(可能会进行格式转换),若为`equation`,`value` 字段解析为Python 表达式并进行运行 236 | 237 | - `child_ids` (multi) 238 | 239 | 指定多个子动作 (`ir.actions.server`) 来启用多状态。如子动作本身返回动作,上一个会作为multi自己的下一个动作返回客户端 240 | 241 | 242 | 243 | ### 运行上下文 244 | 245 | 在服务端动作的运行上下文或周边存在很多键可以使用: 246 | 247 | - `model` 通过 `model_id`关联动作的模型对象 248 | - `record`/`records` 动作所触发的记录/记录集,可以为空。 249 | - `env` Odoo环境 250 | - `datetime`, `dateutil`, `time`, `timezone` 相应Python模块 251 | - `log: log(message, level='info')` 在ir.logging表中用于记录信息的日志函数 252 | - `Warning` 针对`Warning` 异常的构造器 253 | 254 | 255 | 256 | ## 报表动作(`ir.actions.report`) 257 | 258 | 触发报表打印 259 | 260 | - `name` (必传) 261 | 262 | 仅在查询一些排序列表中的某一个时用于报表的助记符/描述 263 | 264 | - `model` (必传) 265 | 266 | 报表相关的模型 267 | 268 | - `report_type` (default=qweb-pdf) 269 | 270 | 要么是用于PDF报表的 `qweb-pdf` ,要么是用于HTML报表的 `qweb-html` 271 | 272 | - `report_name` (必传) 273 | 274 | 报表的名称 (将会与PDF的输出名称相同) 275 | 276 | - `groups_id` 277 | 278 | 允许查看/使用当前报表用户组的[`Many2many`](https://alanhou.org/odoo-13-orm-api/#odoo.fields.Many2many) 字段 279 | 280 | - `multi` 281 | 282 | 若设置为`True`, 该动作将不会在表单视图中显示。 283 | 284 | - `paperformat_id` 285 | 286 | 希望用于此报表的对应于纸张格式的[`Many2one`](https://alanhou.org/odoo-13-orm-api/#odoo.fields.Many2one)字段(若未指定,会使用公司格式) 287 | 288 | - `attachment_use` 289 | 290 | 若设置为`True`, 该报表仅在请求的初次进行生成,随后会从存储的报表中重新打印,而不会每次都重新生成。可用于必须仅生成一次的报表 (例如出于法律原因) 291 | 292 | - `attachment` 293 | 294 | 定义报表名称的python表达式;记录可以 `object`变量进行访问 295 | 296 | 297 | 298 | ## 客户端动作(`ir.actions.client`) 299 | 300 | 触发完全在客户端实现的动作。 301 | 302 | - `tag` 303 | 304 | 动作的客户端标识符, 客户端应知道如何响应的任意字符串 305 | 306 | - `params` (可选) 307 | 308 | 与客户端动作标记一起发送到客户端的附加数据的Python字典 309 | 310 | - `target` (可选) 311 | 312 | 客户端动作是否应在主内容区(`current`)、以全屏模式(`fullscreen`)或对话框/弹窗(`new`)中打开。使用 `main` 代替`current` 来清除面包屑。默认值为 `current`。 313 | 314 | ``` 315 | { 316 | "type": "ir.actions.client", 317 | "tag": "pos.ui" 318 | } 319 | ``` 320 | 321 | 告诉客户端启动POS 界面,服务端并不了解 POS 界面的运行方式。 322 | 323 | 324 | 325 | ## 自动化动作(`ir.cron`) 326 | 327 | 以预定义频率自动触发的动作。 328 | 329 | - `name` 330 | 331 | 自动化动作的名称 (主要在日志显示中使用) 332 | 333 | - `interval_number` 334 | 335 | 在两个动作执行之间的*nterval_type* 计量单位数 336 | 337 | - `interval_type` 338 | 339 | 频率间隔的计量单位(`minutes`, `hours`, `days`, `weeks`, `months`, 340 | 341 | - `numbercall` 342 | 343 | 这一动作需要运行的次数。如果动作要进行无限动作,设置为 `-1`。 344 | 345 | - `doall` 346 | 347 | 在服务重启时指定是否执行未执行动作的布尔值。 348 | 349 | - `model_id` 350 | 351 | 这一动作将会被调用的模型 352 | 353 | - `code` 354 | 355 | 动作的代码内容。可以是对模型方法的简单调用:`model.()` 356 | 357 | - `nextcall` 358 | 359 | 该动作的下一次计划执行日期(date/time 格式) 360 | 361 | -------------------------------------------------------------------------------- /reference/command-line-interface-odoo-bin.md: -------------------------------------------------------------------------------- 1 | # 命令行接口:odoo-bin 2 | 3 | - 本文来自[Odoo 13官方文档之开发者文档](../README.md)系列文章 4 | 5 | ## 运行服务 6 | 7 | ###### `-d , --database ` 8 | 9 | 在安装或更新文件时使用的数据库。提供一个逗号分隔列表,列表中提供数据库限制权限。 10 | 11 | 高级数据库选项请参见 [下方内容](#reference-cmdline-server-database)。 12 | 13 | ###### `-i , --init ` 14 | 15 | 在运行服务前要安装的模块的逗号分隔列表(要求有 [`-d`](#cmdoption-odoo-bin-d)选项)。 16 | 17 | ###### `-u , --update ` 18 | 19 | 在运行服务前要更新的模块的逗号分隔列表(要求有 [`-d`](#cmdoption-odoo-bin-d)选项)。 20 | 21 | ###### `--addons-path ` 22 | 23 | 模块所存储的目录的逗号分隔列表。这些目录供模块扫描。 24 | 25 | ###### `-c , --config ` 26 | 27 | 指供一个替代 [配置文件](#reference-cmdline-config) 28 | 29 | ###### `-s, --save` 30 | 31 | 保存服务端配置到当前配置文件中 (默认为`*$HOME*/.odoorc` ,可通过使用 [`-c`](#cmdoption-odoo-bin-c)进行重载)。 32 | 33 | ###### `--without-demo` 34 | 35 | 在模块安装时禁止加载演示数据的逗号分隔列表,使用 `all` 来针对所有模块。 36 | 37 | ###### `--test-enable` 38 | 39 | 在安装模块之后运行测试 40 | 41 | ###### `--test-tags 'tag_1,tag_2,...,-tag_n'` 42 | 43 | 选择通过使用标签运行的测试。 44 | 45 | ###### `--screenshots` 46 | 47 | 指定在HttpCase.browser_js测试失败时写入截屏快照的路径。 默认值为`/tmp/odoo_tests/*db_name*/screenshots` 48 | 49 | ###### `--screencasts` 50 | 51 | 启用录屏并指定写入录屏文件的路径。需要安装 `ffmpeg`工具来将各帧编码入视频文件中。否则将保存帧而不是视频文件。 52 | 53 | `1`, `t` 或 `true` 可用于使用同一目录作为上述的 `--screenshots` 选项。 54 | 55 | 56 | 57 | ### 数据库 58 | 59 | ###### `-r , --db_user ` 60 | 61 | 数据库用户名,用于连接PostgreSQL. 62 | 63 | ###### `-w , --db_password ` 64 | 65 | 若使用了 [密码验证](https://www.postgresql.org/docs/9.3/static/auth-methods.html#AUTH-PASSWORD)时,为数据库密码。 66 | 67 | ###### `--db_host ` 68 | 69 | 数据库服务端的主机 70 | 71 | - Windows上的`localhost` 72 | - 否则为UNIX套接字 73 | 74 | ###### `--db_port ` 75 | 76 | 数据库监听的端口,默认为5432 77 | 78 | ###### `--db-filter ` 79 | 80 | 隐藏不匹配``的数据库。过滤器是一个[正则表达式](https://docs.python.org/3/library/re.html),额外之处有: 81 | 82 | - `%h` 由所进行请求的完整主机名替换。 83 | - `%d`由所进行请求的子域名进行替换,`www` 除外(因此域名`odoo.com` 和 `www.odoo.com` 同时匹配数据库`odoo`)。这些运算是区分大小写的。添加选项 `(?i)` 来匹配所有数据库(因此域名 `odoo.com` 使用 `(?i)%d` 匹配数据库 `Odoo`). 84 | 85 | 自版本11开始,还可以通过使用–database参数并指定一个逗号分隔的数据库列表来限定对指定数据库的访问 86 | 87 | 在合并这两个参数时,db-filter替代限定数据库列表的逗号分隔列表,而逗号分隔列表用于执行像升级模块这类请求运算。 88 | 89 | ``` 90 | $ odoo-bin --db-filter ^11.*$ 91 | ``` 92 | 93 | 限制对名称以11开头的数据库的访问 94 | 95 | ``` 96 | $ odoo-bin --database 11firstdatabase,11seconddatabase 97 | ``` 98 | 99 | 限定仅访问两个数据库, 11firstdatabase 和 11seconddatabase 100 | 101 | ``` 102 | $ odoo-bin --database 11firstdatabase,11seconddatabase -u base 103 | ``` 104 | 105 | 限定仅访问两个数据库,11firstdatabase 和 11seconddatabase,并升级一个数据库中的 base模块:11firstdatabase。如果数据库11seconddatabase 不存在,会创建数据库并安装base模块 106 | 107 | ``` 108 | $ odoo-bin --db-filter ^11.*$ --database 11firstdatabase,11seconddatabase -u base 109 | ``` 110 | 111 | 限定对名称以11开头的数据库的访问,并对一个数据库的 base模块进行升级:11firstdatabase。如数据库11seconddatabase 不存在,会创建该数据库并安装 base 模块 112 | 113 | ###### `--db-template