这通过在数据库层面为列添加NOT NULL 约束来实现 index (bool) – 是否为字段添加索引。注意:对不存储、虚拟字段不起作用。...类型的属性建立对应表字段,针对Many2many类型的属性,odoo会建立一张辅助表,表名默认格式为model1_table_name_model2_table_name_rel,该表拥有两列,一列为当前模型表主键...这意味着这些inverse字段的值(触发inverse方法的值除外)可能不会给出正确的值,这可能会破坏inverse方法的预期行为 相关字段(Related fields) 计算字段的一种特殊情况是相关...当需要相关行为时,应在模型上定义它们: odoo.fields.name _rec_name的默认值,用于在需要代表性“命名”的上下文中显示记录。...odoo.fields.Char类型 odoo.fields.company_id 用于Odoo多公司行为的主字段名。供:meth:~Odoo.models.
在我们的estate模块中,我们需要以逻辑方式组织字段: 在列表(树)视图中,我们希望显示的不仅仅是名称。 在表单视图中,应该对字段进行分组。 在搜索视图中,我们必须能够搜索的不仅仅是名称。...列表视图,也叫树(tree)视图, 以表格的形式显示记录。 视图根元素为。...其最基础版本仅简单的列出要在表中显示的所有字段(其中每个字段都是一列): <field name="...domain 引用: 本主题相关文档可参考 Search domains. 在odoo中,domain对记录上的条件进行编码:domain是用于选择模型记录子集的条件列表。...每个条件都是一个包含字段名、运算符和值的三元组。如果指定字段满足作用于值的运算符的条件,则记录满足条件。
Fields) 参考: 该主题相关文档可参考 Fields API 字段用于定义model可以存储啥及在哪里存储。...有两大类领域字段:‘简单’字段--直接存储在模型表中的原子值,形如Boolean, Float, Char, Text, Date 和Selection, ‘关系型’ 字段--连接相同或者不同模型的记录...有些属性是所有字段都拥有的,最常见的几个属性如下: string (str, default: 字段名称) UI上显示为字段的label (用户可见)....required (bool, default: False) 如果为 True, 表示该字段值不能为空。创建记录时必须拥有默认值或给定的值。...自动创建的字段(Automatic Fields) 参考: 该话题相关文档可参考 Automatic fields. odoo会在所有model(当然,也可以配置禁止自动创建某些字段)中创建少数字段。
可以利用该特性实现隐藏对象需求,比如针对一些常规下不需要显示的特殊字段,为其设置属性groups = "base.group_no_one",可以实现在非Debug模式下隐藏字段在视图中的显示。...标准格式为 model_,其中, 为模块中_name 替换.为_后的_name 的值 group_id/id 、group_id:id 代指需应用访问权限的组...> name 规则名称 model_id 需要应用规则的模型,标准格式为 model_,其中, 为模块中_name 替换.为_后值 groups...) ORM字段可以具有提供组列表的groups属性(值为逗号分隔的组XML ID列表,如groups='base.group_user,base.group_system')注意:groups属性值格式...注意:通过为当前视图中目标字段添加groups属性实现的权限控制仅作用于当前视图,如果希望当前视图模型(Model)的所有视图中,对该字段实现统一的权限控制话,需要在模型定义中,为目标字段添加groups
1.Dbfilter配置 Odoo是一个多租户系统:一个Odoo系统可以运行并服务于多个数据库实例。它也是高度可定制的,定制(从加载的模块开始)取决于“当前数据库”。 ...如果没有使用多租户,这不是问题,只有一个数据库可以使用,但是如果有多个数据库可以访问,Odoo需要一个规则来知道它应该使用哪一个。 ...下面例子以仅显示名称以“mycompany”开头的数据库 [options] dbfilter = ^mycompany.*$ 仅显示与www之后的第一个子域匹配的数据库:例如,如果传入的请求被发送到...当Postgres部署不是本地部署和/或不使用安装默认值时,可以使用数据库选项覆盖此设置。 打包的安装程序将自动创建一个新用户(odoo),并将其设置为数据库用户。 数据库管理界面受管理密码设置保护。...应将其设置为随机生成的值,以确保第三方不能使用此接口。 所有数据库操作都使用数据库选项,包括数据库管理界面。要使数据库管理界面正常工作,PostgreSQL用户必须具有createdb权限。
我们看到一些属性,如required=True,会影响数据库中的表模式。其他属性也将影响视图或提供默认值。 练习 -- 添加一些属性到字段。...‘Unknown’,而last_seen 字段默认值为当前时间 练习 -- 设置默认值 添加适当的默认值: 卧室数量默认值为 2 可用日期默认为3个月内 修改 odoo14\custom\estate...参考: 主题相关文档可参考 保留字段名称. odoo为预定义行为保留了一些字段名称。...预期效果可参考该动画链接:https://www.odoo.com/documentation/14.0/zh_CN/_images/inactive.gif 注意,已存在的记录的active字段默认值为...False 练习--为active字段添加设置 为active字段设置默认值 为 active 字段设置适当的属性值,让它不再出现在页面。
> 说明: id 菜单外部ID name 如果不指定name,则: 如果为菜单设置了action,则获取action record定义中name字段的值作为菜单name属性的值 如果未设置菜单action...,则获取菜单外部ID为值作为菜单name属性的值 action 打开菜单时需要执行的action的外部ID web_icon 指定菜单图标,格式:模块名称,图标路径,形如estate,static/img...修改相关菜单属性值为目标值(如果需要的话) 示例:重新定义purchase.menu_purchase_root菜单名称 以新定义的菜单为父级菜单,添加子菜单(如果需要的话),添加方式可以参考上文所述,需要注意的是,不管采用哪种方式,原有菜单的子菜单依然存在,并显示为新定义菜单的子菜单...将其model设置为"ir.ui.menu" 添加子元素 ,其中eval=False则表示隐藏,eval=True表示显示
在这种情况下,不会从数据库中检索字段的值,而是通过调用模型的方法来动态计算的字段的值。 要创建计算的字段,请创建字段并将其属性compute设置为方法的名称。...方法设置字段的相关性。...提示: create_date 仅在记录创建时被填充,因此需要一个回退,防止创建时的奔溃 在表单和列表视图中添加字段,正如本章目标中显示的第二个动画中的一样。...设置“garden”字段后,我们希望为花园面积和朝向提供默认值。此外,当“花园”字段未设置时,我们希望花园面积和重置为零,并删除朝向。在这种情况下,给定字段的值会影响其他字段的值。...练习--为花园面积和朝向赋值 在estate.property模型中创建 onchange 方法以便当勾选花园时,设置花园面积(10)和朝向(North),未勾选时,移除花园面积和朝向值。
这些都是项目稳定性和一定成熟度的良好指标,即使这些值通常仍然很低。.../postgresql:/var/lib/postgresql/data restart: always # Odoo odoo10: image: odoo:10.0...container_name: "odoo-10" depends_on: - db volumes: - ..../odoo-10/addons:/mnt/extra-addons - ....生成的未填写的字段必须填写。例如,在我们的示例中,Odoo CRM 需要其 URL,以便 Traefik 重定向到它。
构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了一些标记,如或,但在设计方面几乎没有什么可做的。...您可能已经熟悉现有的引擎,如Jinja(Python)、ERB(Ruby) 或Twig(PHP)。Odoo自带内置引擎:QWeb模板。QWeb是Odoo使用的主要模板引擎。...你可能已经在Odoo见过 看板,其中的记录以卡片状结构显示。我们将为我们的房地产模块构建这样的视图。 一个具体的示例: 一个看板视图 参考: 本主题关联文档可以查看Kanban....练习--制作一个最小的看版视图 根据上述提供的简单例子,为房产创建一个最小化的看板视图。唯一展示的字段为name....在上面的示例中,字段name被添加到元素中,但state在它之外。当我们需要字段的值但不想在视图中显示它时,可以将其添加到元素之外。
,命名为odoo13,用户目录为/opt/odoo13: sudo useradd -m -d /opt/odoo13 -U -r -s /bin/bash odoo13 你可以将这个名字设置成任何你想要设置的名字...--depth 1 --branch 13.0 /opt/odoo13/odoo 一旦下载完成,为 Odoo 创建一个新的 Python 虚拟环境。...,一个类似下面的屏幕将会显示: ?...十一、总结 这篇指南带你浏览了如何在 Ubuntu 18.04 上的 Python 虚拟环境中 安装 Odoo 13,并使用 Nginx 作为反向代理服务器。...我们展示了如何在生产环境中如何启用多进程以及优化 Odoo。
这个指南讲解了如何在 CentOS 8 上一个 Python 虚拟机环境中从源码安装 Odoo 13。我们将会从 Github 上编译 Odoo 源码并且配置 Nginx 作为反向代理服务器。...四、安装和配置 PostgreSQL 我们将会从标准的 CentOS 8 源仓库中安装 PostgreSQL 10。...具体依赖包参考`Installing Dependencies` 一旦安装完成,解除这个环境: deactivate 为自定义组件创建一个新的目录: mkdir /opt/odoo13/odoo-custom-addons...基于工作进程,计算 RAM 内存: RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM 计算结果显示,Odoo 安装将会需要大概 2GB 内存。...我们展示了如何在生产环境中如何启用多进程以及优化 Odoo。
模型之间的关系(Relations Between Models) 上一章介绍了为包含基本字段的模型创建自定义视图。然而,在任何真实的业务场景中,我们都需要不止一个模型。此外,模型之间的链接是必要的。...买家可以是任何个人,然而,销售人员必须是房产机构的员工(即odoo用户)。 在odoo中,有两种我们经常引用的两种模型: res.partner: 一个partner为一个物理实体或者法人实体。...销售人员的默认值必须是当前用户。买家不能被复制。...它支持标准Python的集合操作,如len()和iter(),以及recs1 | recs2等额外的集合操作。...其次,尽管property_id字段是必需的,但我们没有将其包含在视图中。odoo如何知道我们的报价与哪个房产相关?这就是使用odoo框架的一部分魔力:有时候事情是隐式定义的。
, string),左边的是数据库中存储的值,右边的是一个用于界面显示的描述。...这个需求跟时间有关,并且时间是流动(一直在变化)的,所以我们应该要有一个方法在用户每次打开待办事项之前,把这个结果计算好,并且反馈给用户,还好 Odoo 的 ORM 已经为我们实现了相关的机制——计算字段...,只不过多了一个 compute 属性,它的值是计算这个字段值的方法名。...deadline 这个字段的值(我们需要用它的值和当前时间进行比较),如果一个计算字段会用到多个其他字段的值,这里就需要以逗号分隔,将用到的值的字段名依次传入装饰器中。...然后我们再看到 标签多了一个属性 decoration-danger,这个属性可以接受表达式或字段名作为值,当结果为真时,这个属性就会生效,将 TreeView 中满足表达式的行以红色标记
;limit 设置列表视图每页最大显示记录数 菜单定义 odoo14\custom\estate\views\estate_menus.xml <?...estate_customer_tree', CustomListView); }); 说明:如果其它模块的列表视图也需要实现类似功能,想复用上述js,需要替换js中以下内容: 修改estate.upload.customer.mixin为其它自定义全局唯一值...替换o_estate_customer_upload为在对应按钮视图模板中定义的对应class属性值 替换estate.CustomerHiddenUploadForm为在对应按钮视图模板中定义的隐藏表单模版名称...替换estate_customer_tree为自定义全局唯一值 do_action 为 Widget() 的快捷方式(定义在odoo14\odoo\addons\web\static\src\js\core...所有子节点) replace 将模板元素内容替换上下文节点 attributes 模版元素内容应该是任意数量的属性元素,每个元素都有一个名称属性和一些文本内容,上下文节点的命名属性将被设置为属性元素的值
wizard可以通过关系字段(many2one或many2many)引用常规记录或wizard记录,但常规记录不能通过many2one字段引用wizard记录 详细代码 注意:为了更清楚的表达本文主题...action_select_records_via_checkbox函数接收的args参数,其类型为字典,形如以下,其中f412cde5-1e5b-408c-8fc0-1841b9f9e4de为UUID...> 说明: saveSelectionsToSessionStorage 为"true"则表示点击复选框时,将当前选取的记录存到浏览器sessionStorage中,可选 odoo14\custom\estate...0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10...> 说明:class="oe_highlight" 设置按钮高亮显示
2.cpu性能评估 (1)利用vmstat命令监控系统CPU 该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU一个负载情况。...Cpu us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。 sy列显示了内核进程消耗的CPU时间百分比。...%nice列显示了运行正常进程所消耗的CPU 时间百分比。 %system列显示了系统进程消耗的CPU时间百分比。...%iowait列显示了IO等待所占用的CPU时间百分比 %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。...%idle列显示了CPU处在空闲状态的时间百分比。
多列分组”中包含了“摘要字段”,其执行结果如下表 ?...“多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a, a2001, 13”为“a, a2001, 11”和“a, a2001, 2”两条记录的合并。...Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成 select 类别, 摘要, sum(数量) AS 数量之和...compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。...示例11与示例10相比多了“order by 类别”和“... by 类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成,另外: compute
可以看到,使用explain显示了很多列,各个关键字的含义如下: table:顾名思义,显示这一行的数据是关于哪张表的; type:这是重要的列,显示连接使用了何种类型。...从最好到最差的连接类型为:const、eq_reg、ref、range、indexhe和ALL; possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。...可以为相关的域从where语句中选择一个合适的语句; key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MySQL会选择优化不足的索引。...3、对于多列索引,不是使用的第一部分,则不会使用索引; 4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引; ? 5、like的模糊查询以 % 开头,索引失效; ?...如果全表扫描,假设10条数据一个数据块,那么只需访问1000个数据块,既然全表扫描访问的数据块少一些,肯定就不会利用索引了。 到此为止,大致探讨了10个相关的可能造成索引失效的问题,也欢迎大家补充!
领取专属 10元无门槛券
手把手带您无忧上云