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

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

时间:2024-11-13 09:57:09浏览次数:1  
标签:XML 示例 视图 引用 模块 Odoo ref ID

在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都可以使我们的开发过程更加便捷、高效。

标签:XML,示例,视图,引用,模块,Odoo,ref,ID
From: https://www.cnblogs.com/lyt263/p/18543251

相关文章

  • A Method of Setting the LiDAR Field of View in NDT Relocation Based on ROI
    基于ROI的NDT重定位激光雷达视场设置方法期刊:MDPI单位:山东理工大学摘要:在高精度地图自动导航的重定位图中,激光雷达布放和视场选择起到检测车辆相对位置和位姿的作用。当激光雷达视场被遮挡或激光雷达位置错位时,很容易导致重定位丢失或重定位精度低。针对遮挡视场过大时ND......
  • Recursive Algorithm for Sliding Signal Processing
    目录概滑动窗口上的快速算法Farhang-BoroujenyB.andGazorS.Generalizedslidingfftanditsapplicationtoimplementationofblocklmsadaptivefilters.TSP,1994JacobsenE.andLyonsR.TheslidingDFT.SPM,2003.JacobsenE.andLyonsR.Anupdateto......
  • [论文阅读] General Image-to-Image Translation with One-Shot Image Guidance
    写在前面原文:https://arxiv.org/abs/2307.14352GitHub:https://github.com/CrystalNeuro/visual-concept-translator关键词:I2I阅读理由:学习他们的实验方法前置知识:PTI、多概念反转multi-conceptinversion速览WHY当前方法缺乏保留内容或有效翻译视觉概念的能力,因此无法将......
  • 【转】[Java][Idea] 打开时报错 Internal error. Address already in use: bind
    方法一:netshwinsockreset以管理员身份运行cmd执行这个命令,然后重启电脑。 方法二:按报错提示,访问  https://jb.gg/ide/critical-startup-errors  按文章,可以参考 https://youtrack.jetbrains.com/issue/IDEA-238995解决问题 以下是文章摘抄:ReviseIDEdire......
  • nextjs 动态生成sitemap.xml 文件
    在app目录下创建文件sitemap.js,默认导出sitemap方法importfsfrom"fs";importpathfrom"path";constbaseUrl=process.env.NEXT_PUBLIC_SITE_URL||"https://www.adog.life";constbaseDir="src/app";constdynamicDirs=[......
  • @Valid和@Validated的区别
    1.@Valid的使用@Valid是JavaBeanValidation规范(JSR-303/JSR-380)中的标准注解。它用于触发对JavaBean的验证。你可以在类的字段上使用验证注解(如@NotNull,@Size,@Min,@Max等),然后使用@Valid来触发对这些字段的验证。示例:javaimportjavax.validation.constrain......
  • php xml相关操作
    <?phpclassUtils{/***将数据转为XML*/publicstaticfunctiontoXml($array){$xml='<xml>';forEach($arrayas$k=>$v){$xml.='<'.$k.'><![CDATA['.$v.']]>......
  • 删除重复id的记录
    数据里面,id重复,创建时间不同 --新建字段repete_flag--针对重复id的数据,打标记updateyg_gate_base_bsetrepete_flag='REPETE'WHEREidIN(selectidfromyg_gate_base_bgroupbyidhavingcount(*)>1) select*fromyg_gate_base_bwhererepete_flag=......
  • Git最新最新详细教程、安装(从入门到精通!!!!企业级实战!!!工作必备!!!结合IDEA、Github、Gitee实
    可以不用看第4章Git客户端便捷操作,第5章GitLab的部署与使用!!!!初学者第1章Git概述Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能......
  • wxWidgets GUI设计教程 - 数据处理与表单
    wxWidgetsGUI设计教程-数据处理与表单目标本教程将详细介绍在wxWidgets中实现数据处理和表单管理的方法。通过学习如何在GUI应用中创建和管理表单,可以实现用户数据的录入、校验与展示,从而构建功能丰富的交互界面。本教程将从简单的表单布局开始,逐步深入数据校验、数据......