在Odoo开发中,ref是一个非常重要的函数,用于在XML文件中引用其他数据的ID,帮助我们快速定位和调用系统中已经存在的记录。

news/2024/11/14 13:09:20/文章来源:https://www.cnblogs.com/lyt263/p/18543251

在Odoo开发中,ref是一个非常重要的函数,用于在XML文件中引用其他数据的ID,帮助我们快速定位和调用系统中已经存在的记录。ref的全称是reference,可以通过该函数引用特定的视图、字段、模型等元素,从而在模块开发中实现跨文件、跨模块的引用。下面我会详细解释ref的作用,并提供丰富的示例,帮助你更好地理解和掌握它。

1. 基本语法

ref的基本语法是<field name="field_name" ref="module_name.xml_id"/>,其中:

  • field_name:字段的名称,用于指定需要引用的位置。
  • module_name.xml_id:模块名和XML ID的组合。module_name是所引用对象的所属模块,xml_id是该对象的XML ID。

2. ref的基本用法示例

示例1:引用视图

在Odoo中可以使用ref引用一个视图。假设我们需要在自定义模块中使用purchase模块中的某个视图:

<field name="view_id" ref="purchase.purchase_order_tree"/>

这里,purchase是模块名称,purchase_order_tree是该模块中视图的XML ID。这段代码用于引用purchase模块中的采购订单树状视图。

示例2:引用菜单项

当我们需要引用另一个模块的菜单项时,可以使用ref。假设我们需要引用account模块中的会计菜单:

<field name="menu_id" ref="account.menu_finance_accounting"/>

在这里,account.menu_finance_accounting代表account模块中的会计菜单项。

示例3:引用操作(action)

有时我们需要引用另一个模块中的操作(action),例如在自定义模块中引用hr模块中的雇员表单视图操作:

<field name="action" ref="hr.open_view_employee_form"/>

这段代码表示引用hr模块中的雇员表单视图操作。

3. 常见用法场景

场景1:设置默认视图

在Odoo中创建一个新菜单项,并让它打开一个特定视图。我们可以使用ref来设置默认视图。例如:

<record id="menu_my_custom_view" model="ir.ui.menu"><field name="name">我的自定义视图</field><field name="parent_id" ref="base.menu_custom"/><field name="action" ref="my_module.action_my_custom_view"/>
</record>

这里,我们创建了一个新的菜单项menu_my_custom_view,并使用ref引用一个自定义的操作action_my_custom_view。这将打开指定的视图。

场景2:引用安全组

在Odoo的权限控制中,可以通过ref为不同的操作分配用户权限。例如:

<record id="model_my_model_rule" model="ir.rule"><field name="name">访问我的模型</field><field name="model_id" ref="model_my_model"/><field name="groups" eval="[(4, ref('my_module.group_my_custom_group'))]"/>
</record>

这里通过ref引用了一个安全组group_my_custom_group,该安全组允许特定用户访问模型my_model

场景3:引用字段

如果需要在代码中引用某个字段,可以使用ref。假设我们需要引用res.partner模型中的customer字段:

<field name="field_name" ref="base.field_res_partner__customer"/>

这会引用base模块中res.partner模型的customer字段。这种引用方式通常用于字段的继承或扩展。

场景4:引用数据记录

我们还可以使用ref引用特定数据记录。例如,在为某个产品设置默认分类时,可以使用ref引用分类ID:

<field name="categ_id" ref="product.product_category_all"/>

这里引用了product模块中的一个产品分类product_category_all

4. ref的高级用法

高级示例1:动态视图引用

有时,我们需要根据某些条件动态引用不同的视图。可以通过ref结合if条件实现。

<field name="view_ids" eval="[(0, 0, {'view_mode': 'tree', 'view_id': ref('module.view_tree')}),(0, 0, {'view_mode': 'form', 'view_id': ref('module.view_form')})]"/>

这段代码会在视图模式为树和表单时,动态引用不同的视图ID。

高级示例2:设置继承视图的父视图

在Odoo中创建继承视图时,需要指定父视图。可以使用ref来引用父视图。例如:

<record id="inherit_purchase_order_form" model="ir.ui.view"><field name="name">purchase.order.form.inherit</field><field name="model">purchase.order</field><field name="inherit_id" ref="purchase.purchase_order_form"/><field name="arch" type="xml"><xpath expr="//field[@name='partner_id']" position="after"><field name="custom_field"/></xpath></field>
</record>

这里inherit_id使用ref引用了purchase模块中的purchase_order_form表单视图,并在partner_id字段后添加了custom_field字段。

高级示例3:动态设置默认值

在创建记录时,可以通过ref为字段设置默认值。例如,在创建采购订单时,可以通过ref为供应商字段设置默认供应商:

<record id="purchase_order_default" model="purchase.order"><field name="partner_id" ref="base.res_partner_1"/>
</record>

这里引用了base模块中的供应商res_partner_1,作为采购订单的默认供应商。

5. 注意事项

  • ref只能引用已经定义的XML ID,因此引用的ID必须在被引用之前存在。
  • 如果跨模块引用,确保模块依赖关系已正确定义,否则会导致引用失败。
  • 使用ref时,注意ID的拼写准确,因为错误的ID会导致系统错误。

总结

ref是Odoo开发中不可或缺的一个工具,它能帮助我们在不同的模块和文件中引用已有的记录、视图、字段等。无论是简单的视图引用,还是高级的权限控制和继承配置,ref都可以使我们的开发过程更加便捷、高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/832822.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VMware VCF】通过备份的配置文件还原 SDDC Manager 组件。

之前在这篇文章(使用 SFTP 服务器备份 VCF 核心组件的配置文件。)中配置并备份了 VCF 环境中 SDDC Manager 组件的配置文件,这篇文章接着这个主题,看看当 SDDC Manager 组件因意外发生故障时,如何通过备份的配置文件进行还原和恢复。一、检查 SDDC Manager执行还原之前,请…

校园监控防欺凌系统 学生打架霸凌识别系统

校园监控防欺凌系统 学生打架霸凌识别系统通过在宿舍、洗手间、楼梯拐角等校园监控死角及隐私场所安装的音频监控设备,校园监控防欺凌系统 学生打架霸凌识别系统对学生的言行进行实时监控和关键词确认与分析。系统特别针对学生可能发出的求救词汇,如“别打我别打我”、“救命…

设备漏油检测识别系统 漏油自动识别系统

设备漏油检测识别系统 漏油自动识别系统通过在生产设备和管道区域安装摄像头,设备漏油检测识别系统 漏油自动识别系统利用AI人工智能技术对视频画面进行实时监测和分析。系统能够自动识别出漏油、跑冒滴漏等异常情况,一旦检测到此类事件,会立即通过预设的告警机制,将告警信…

实验十六

实验16:命令模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构; 2、能够利用命令模式解决实际问题。[实验任务一]:多次撤销和重复的命令模式 某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用…

实验十五

实验15:职责链模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构; 2、能够利用职责链模式解决实际问题。[实验任务一]:财务审批 某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经…

原生代币转其他代币permit2不需要授权

采用0x进行bnb转usdt的时候不需要permit2,其他币转原生代币的时候需要permit2 curl --location --request GET https://api.0x.org/swap/permit2/quote?chainId=56&sellToken=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&buyToken=0x55d398326f99059ff77548524699902…

FANUC发那科工业机器人减速器维修小细节

在现代工业生产中,FANUC发那科机器人已成为不可或缺的一部分。然而,随着时间的推移,发那科机械手减速器可能会出现故障,影响机器人的正常工作。 一、了解减速器的结构与工作原理 在开始FANUC发那科机器人维修之前,了解减速器的结构与工作原理至关重要。FANUC发那科机器人减…

太强了!14.7K star!Windows系统居然还有开源替代版了?!

在操作系统的世界里,Windows 系统一直占据着重要的地位。然而,你可能不知道的是,还有一个拥有 14.7K star 的开源替代版 ——ReactOS。 1、ReactOS 介绍 ReactOS 是一个自由开源的操作系统,其目标是实现与 Windows 系统在二进制级别上的兼容。这意味着,我们可以在这个系统…

HuggingFace 核心组件及应用实战

带着问题来学习什么是Hugging Face?它的目标是什么?Hugging Face 中包含哪些知名的预训练模型?如果我们要在 Hugging Face 中下载 BERT,那么只有一种版本,还是有多种版本可以选择?每一种版本的 BERT 中,只有一种格式还是有多种格式可以适应多种下游任务?Hugging Face 库…

AllPairs工具助力正交表测试用例设计

AllPairs工具助力正交表测试用例设计 正交表法是一种高效的测试方法,特别适用于软件测试中需要处理多个控件及其多种取值组合的情况。以下是对正交表法的详细解释: 一、正交表法概述 正交表法是一种利用正交表来设计测试用例的方法,旨在通过较少的测试次数达到较高的测试覆盖…

SAM4MLLM:结合多模态大型语言模型和SAM实现高精度引用表达分割 | ECCV24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expression Segmentation论文地址:https://arxiv.org/abs/2409.10542 论文代码:https://github.com/AI-Application-and-Integration-Lab/SAM4MLLM…

信息时代的安全堡垒:500强企业数据安全传输案例解析

数据安全传输,这个是数据安全里一个比较细分的领域,但是包括的传输场景也是很多的,比如隔离网之间的跨网文件传输、企业内外部之间的文件安全外发、总分支之间的数据传输分发、信创环境下的高性能传输、机台等设备的数据采集传输、业务系统之间的自动化传输同步等等。 每家企…