在上一章中已经看到,odoo能够为给定模型生成默认视图。实际上,默认视图对于业务应用程序来说是不可接受的。相反,我们至少应该以逻辑的方式组织各个字段。 视图是在带有操作和菜单的XML文件中定义的。...在我们的estate模块中,我们需要以逻辑方式组织字段: 在列表(树)视图中,我们希望显示的不仅仅是名称。 在表单视图中,应该对字段进行分组。 在搜索视图中,我们必须能够搜索的不仅仅是名称。...列表视图,也叫树(tree)视图, 以表格的形式显示记录。 视图根元素为。...运算顺序 以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。...在合适的XML中为 estate.property 模型定义一个搜索视图 添加过滤和分组 添加以下内容到之前创建就的搜索视图 一个显示avaliable地产的过滤器,也就说,state应该为 “New
一个新应用 房地产广告模块 假设需要开发一个房地产模块,该模块覆盖未包含在标准模块集中特定业务领域。...以下为包含一些广告的主列表视图 form视图顶层区域概括了房产的重要信息,比如name,Property Type, Postcode等等。...我们可以在这里看到,潜在买家可以提供高于或低于预期售价的报价,取决于卖方是否接受报价。 准备插件目录 参考: 和该主题相关的文档可参考 manifest....Goal: 该小节的目标是让odoo识别我们的新模块,一个空壳。它将显示在Apps中 创建模块的第一步:新建一个目录。...服务: python odoo-bin --addons-path=custom,odoo/addons -r myodoo -w test123 -d odoo 验证 浏览器页面中访问Apps, 点击搜索
因此,对CSV文件所做的所有说明对XML文件都适用。当数据链接到视图时,我们将它们添加到views文件夹中 本章,我们将通过XML文件加载我们第一个action和菜单。...odoo中,用户接口(action,菜单和视图)大部分是通过创建和组装XML文件中的记录来定义的。常见的模式为 菜单> action > 视图。为了访问记录,用户在几个菜单级中导航。...view_mode 可获取的视图。本例中为列表(树)和表格视图。 odoo中到处都可以找到例子,但是这个 简单action的好例子。关注XML 数据文件结构,因为你在后续的练习中会用到。 <?...然而,菜单总是遵循一种体系结构,实际上有三个层次的菜单: 根菜单,显示在App切换器中(Odoo社区版切换器是一个下拉菜单) 第一级菜单,显示在顶部栏中 动作菜单 最容易的方式是在XML文件中定义结构来创建菜单...', 'views/estate_menus.xml' ] } 重启odoo服务,查看效果 字段,属性和视图(Fields, Attributes And
\custom\estate\views\estate_property_views.xml,estate_property_view_form视图,Description描述页,添加total_area...\custom\estate\views\estate_property_views.xml文件estate_property_view_form视图 <...提示: create_date 仅在记录创建时被填充,因此需要一个回退,防止创建时的奔溃 在表单和列表视图中添加字段,正如本章目标中显示的第二个动画中的一样。...在许多情况下,可以使用computed field和onchanges来实现相同的结果。始终首选computed field,因为它们也是在表单视图上下文之外触发的。...这可能会产生与预期相反的结果:终端用户被所有自动化所迷惑。 computed field往往更容易调试:这样的字段是由给定的方法设置的,因此很容易跟踪设置值的时间。
例如,在我们的房地产场景中,我们希望在常规用户视图中直接显示销售人员的财产列表。...的房产 预期效果动画地址:https://www.odoo.com/documentation/14.0/zh_CN/_images/unlink.gif 房产收到报价时,房产状态应该改成‘Offer...Received’ 不能以低于现有报价的价格创建报价 预期效果动画地址:https://www.odoo.com/documentation/14.0/zh_CN/_images/create.gif...为此,我们需要向res.users模型添加一个字段,并调整其视图以显示它。 Odoo提供了两种继承机制来以模块化的方式扩展现有模型。...目标: 在用户表单视图中显示与销售人员关联的avaliable房产列表其用户表单视图 Odoo提供了视图继承,其中子“扩展”视图应用于根视图之上,而不是就地修改现有视图(通过重写它们)。
--为用户组添加用户 base.user_root root用户 --> odoo> 说明: noupdate:如果数据文件的内容预期只应用一次...可以利用该特性实现隐藏对象需求,比如针对一些常规下不需要显示的特殊字段,为其设置属性groups = "base.group_no_one",可以实现在非Debug模式下隐藏字段在视图中的显示。...如果(规则)未选择某个操作,则不会为该操作检查规则,就像该规则不存在一样。 规则默认适用所有操作。..."/> 验证,发现界面上,未授权上述框选权限的用户已经看不到上述字段了 注意:通过为当前视图中目标字段添加groups属性实现的权限控制仅作用于当前视图,如果希望当前视图模型(Model)的所有视图中,...接口,会调用fields_view_get方法,可以重写此方法以控制xml显示的效果(参考网络资料,未实践验证) 按钮权限(按钮级别) 类似字段权限控制,仅需在在对应视图中,为目标按钮元素
] } 再次重启服务,并刷新查看结果。.../custom/estate/views/estate_property_views.xml tree,form视图 <?...") 修改odoo14\custom\estate\views\estate_property_views.xml中estate_property_view_form视图 预期价格。 报价适用于一个房产,但同一个房产可以有多个报价。many2one的概念再次出现。然而,在本例中,我们希望显示给定地产的报价列表,因此我们将使用one2many概念。...首先,我们不需要所有模型的操作或菜单。某些模型只能通过另一个模型访问。在我们的练习中就是这样的:报价总是通过房产获得的。 其次,尽管property_id字段是必需的,但我们没有将其包含在视图中。
Odoo自带内置引擎:QWeb模板。QWeb是Odoo使用的主要模板引擎。它是一个XML模板引擎,主要用于生成HTML片段和页面。 你可能已经在Odoo见过 看板,其中的记录以卡片状结构显示。...目标: 本节结束时创建一个房产的看板视图 在我们的地产应用程序中,我们希望添加一个看板视图来显示我们的房产。看板视图是标准的Odoo视图(如表单和列表视图),但其结构更灵活。...(注意:以下未展示文件中的所有内容,其它内容保持不变) 视图中显示它时,可以将其添加到元素之外。...注意:best price仅在收到报价时展示,而selling price仅在接受报价时展示 修改odoo14\custom\estate\views\estate_property_views.xml
odoo14\custom\estate\views\estate_customer_views.xml ,其中estate_customer_tree为下文javascript中定义的组件,实现添加自定义按钮;limit 设置列表视图每页最大显示记录数...菜单定义 odoo14\custom\estate\views\estate_menus.xml 按钮视图模板定义 odoo14\custom\estate\static\src\xml\estate_customer_tree_view_buttons.xml 未使用odoo>元素进行“包裹” 'static/src/xml/estate_customer_tree_view_buttons.xml
所有Action都有两个强制属性: type 当前Action的类别,决定可以使用哪些字段以及如何解释action name action的名称,在客户端的界面中显示对action的简短用户可读描述...Bindings(绑定) 除了两个强制属性外,所有action有用于在任意模型的上下文菜单中显示动作的可选属性: binding_model_id 指定action绑定的模型,格式:moduleName.modelName...如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由 fields_view_get()自动完成)。列表的第一种类型是默认视图类型,在执行操作时默认打开。...context (可选) 传递给视图的附加上下文 domain (可选) 隐式添加到所有视图搜索查询的过滤domain limit (可选) 默认情况下要在列表中显示的记录数。...xml version="1.0" encoding="UTF-8"?
实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图(非实际项目界面截图,仅用于介绍本文主题),打开记录详情页(form视图),点击某个按钮(图中的"...disabled", false); } 这里的设计是,执行复选框操作时,先禁用按钮,不允许执行确认操作,因为执行复选框触发的请求可能没那么快执行完成,前端数据可能没完全传递给后端,此时去执行操作,可能会导致预期之外的结果...'views/estate_property_views.xml', 'views/estate_property_offer_views.xml', ] } 记录详情页视图实现...xml version="1.0"?> odoo> 说明:class="oe_highlight" 设置按钮高亮显示
实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下,根据条件对form视图自带按钮的显示、隐藏进行控制 代码实现 隐藏、显示编辑和创建按钮为例 odoo14...function (require) { 'use strict'; let modelConfigs = { 'estate.property': { // form表单视图归属模型...,即需要对按钮的显示做管控的模型名称 /* hideEditButton hideCreateButton的值可以简单理解为eval函数的参数,形如 eval(arg),整个表达式计算结果为...} } return res; } }); }) 说明: 如果需要隐藏其它自带按钮、或自定义按钮,可以通过查看form视图的...加载自定义js odoo14\custom\estate\views\webclient_templates.xml xml version="1.0" encoding="utf-8"?
取决于字段属性,添加一个默认的公司domain class odoo.fields.One2many[源代码] One2many字段的值为 comodel_name中所有满足条件的记录的结果集,而目标模型中的...(4, id, 0) 添加一条id为指定id的已存在记录到记录集 (5, 0, 0) 从结果集移除所有记录, 等价于显示的对每条记录使用命令3。 不能在 create()中使用。...使用[]表示匹配所有 fields (list) – 对象上指定的列表视图中存在的字段列表。...将转换string、help和selection(如果存在)属性 参数 fields – 字段列表, 如果未提供或者为[]则表示所有 attributes – 每个字段需要返回的属性描述列表。...如果未提供或者为[]则表示所有 Model.fields_view_get([view_id | view_type='form'])[源代码] 获取所请求视图的详细组成,如字段、模型、视图架构
架构 数据库服务器层:postgreSQL数据库服务器,用于存储所有应用数据。...应用服务层:包含所有企业模块逻辑(报表引擎、工作流引擎等),向下提供ORM引擎,向上提供web服务,控制服务器与浏览器的通信。 客户层:包括GUI客户端以及Web客户端。...然后使用自己的模块:把自己的模块路径设置到odoo中,重启odoo让其搜索到自定义模块,即可通过odoo进行安装。...static:静态资源文件,如css、js等 views:网页视图文件与模版文件(xml文件,使用QWEB语言进行描述) init.py manifest.py:描述文件 脚手架命令 使用...构建菜单对象——在views文件夹下,使用xml定义菜单项。 构建动作对象,关联某个具体菜单项的响应。 构建视图对象:主要是list、tree、form、search视图。
如果一个字段只有固定的几种可选值,通常都会选择使用 Selection 字段,它接受一个元组列表作为参数,其中元组的组成为 (value, string),左边的是数据库中存储的值,右边的是一个用于界面显示的描述...-- views.xml --> xml"> ...这个需求跟时间有关,并且时间是流动(一直在变化)的,所以我们应该要有一个方法在用户每次打开待办事项之前,把这个结果计算好,并且反馈给用户,还好 Odoo 的 ORM 已经为我们实现了相关的机制——计算字段...我们打开视图文件来加点东西上去: xml --> xml"> <tree string="Todo" decoration-danger="is_expired
在odoo这样的一个商业应用中,第一个考虑的问题就是谁(Odoo 用户(或者组用户))可以访问数据。odoo为指定用户组用户提供了一个安全的数据访问机制。...当数据和安全相关时,存放在 security 目录中,当数据和视图和action相关时,存放在 views 目录中....此外,所有这些文件必须在 __manifest__.py中的data 列表中定义。 查看示例文件 # -*- coding: utf-8 -*- # Part of Odoo....为什么这对于安全来说很重要,因为模块的所有安全配置,都是通过数据文件加载的。 访问权限(Access Rights) 参考: 该主题相关文档可以查看 Access Rights....当模型中没有定义任何访问权限时,odoo会认为没有任何用户可以访问数据,并在日志中打印: 2022-12-14 09:01:38,994 32508 WARNING odoo odoo.modules.loading
参考文档 "解决安装软件包提示Unable to find vcvarsall.bat的问题.md" 安装odoo依赖 解压下载后的odoo_14.0.latest.tar,并对解压结果目录中dist目录下的...bin目录下,双击 pgAdmin4.exe打开PostgreSQL管理界面,双击默认服务,PostgreSQL 12 最后点击 Save 保存 安装rtlcss 说明:这个步骤是官方文档上给出的,笔者未实践...但是也有特例: --db-filter 转换为dbfilter --no-http 转换为 http_enable 日志预设(所有以 --log-开头( --log-handler 和--log-db...:21:17,605 31332 INFO odoo odoo.modules.loading: loading base/data/res_lang_data.xml 2022-12-13 07:21...:17,875 31332 INFO odoo odoo.modules.loading: loading base/data/res_partner_data.xml 2022-12-13 07:21
更改文件所有权和权限 更改odoo-server服务权限和所有权,以便只有root可以写入,而odoo用户只能读取和执行它。...测试服务器 确认一切都按预期工作。...Odoo服务 如果系统日志未指示任何问题,请启用odoo-server设备以启动和停止服务器: sudo systemctl enable odoo-server 登录腾讯云CVM服务器并重新启动您的腾讯云...CVM服务器以查看是否所有内容都按预期工作。...如果一切按预期进行,您可以启动负载测试模块“行为”测试(与代码不兼容的错误不同),以及您配置的任何其他测试。 更新您的生产系统 如果所有测试都通过,您可以更新生产安装。
服务,并且开启随机启动,运行: sudo systemctl enable --now odoo13 验证服务状态: sudo systemctl status odoo13 输出将会像下面一样,显示...>:8069 假设安装完成了,一个类似下面的屏幕将会显示: ?...; } # Gzip gzip_types text/css text/less text/plain text/xml application/xml application...默认情况下,Odoo 服务监听所有网络接口的8069端口。想要禁止对 Odoo 的直接访问,你可以封锁8069端口,并且强制 Odoo 只监听本地监控。...基于工作进程,计算 RAM 内存: RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM 计算结果显示,Odoo 安装将会需要大概 2GB 内存。
同步主节点和从节点数据 确认从节点 PostgreSQL服务未运行: sudo systemctl status postgresql 启动主节点 PostgreSQL服务: sudo systemctl...测试复制 测试您的设置以检查一切是否按预期工作。...现在将依赖关系分组以突出显示新更改。...由于odoo用户将运行该应用程序,因此相应地更改其所有权: sudo chown -R odoo: /opt/odoo/ 将odoo用户设置为日志目录的所有者: sudo chown odoo:root...测试你的Odoo堆栈 确认一切都按预期工作。
领取专属 10元无门槛券
手把手带您无忧上云