7、odoo的模型继承与视图继承

7、odoo的继承

点我下载完整odoo的demo

模型继承

在Odoo中有两种模型的继承机制(传统继承方式和委托继承方式),以模块化方式扩展现有的模型。

传统继承方式允许模块修改在另一个模块中定义的模型的行为:

  • 向模型添加字段,
  • 覆盖模型上字段的定义,
  • 对模型添加约束,
  • 向模型添加方法,
  • 覆盖模型上的现有方法。

委托继承方式允许将模型的每个记录链接到父模型中的记录,并提供对父记录的字段的透明访问。

也可以看看官方:
在这里插入图片描述

传统继承方式 _inherit
  • 能够添加字段
  • 改写字段定义
  • 添加约束
  • 添加或改写方法,共有两种写法
经典继承

_name = model_1

_inherit = model_

<think>我们正在讨论Odoo中的视图继承。用户想知道如何查找特定视图的ID。在Odoo中,视图继承是通过在XML文件中使用`inherit_id`字段来指定要继承的父视图。而父视图的ID就是我们需要查找的。查找特定视图的ID有以下几种方法:1.**通过Odoo界面(开发者模式)**:-激活开发者模式(在设置中,点击“激活开发者模式”)。-进入需要查看视图模型(例如,产品视图,进入产品菜单)。-在视图右上角,点击“调试”图标(虫子图标),然后选择“编辑视图”。-此时,浏览器地址栏会显示当前视图的ID。例如:`http://localhost:8069/web?debug=1#id=42&view_type=form&model=product.template&action=43`,这里的`id=42`就是当前表单视图的ID。-另外,在开发者模式下,打开视图后,在视图的左上角会显示视图的技术名称(XMLID)和数据库ID(ViewID)。注意:我们通常需要的是XMLID(也称为外部ID),因为它是在模块中唯一标识视图的。2. **通过数据库查询**:-使用pgAdmin或其他数据库工具连接到Odoo数据库。-执行SQL查询:`SELECTid, name, model, type,keyFROM ir_ui_view WHEREname='视图名称';`-或者,如果你知道视图的XMLID(例如:`product.product_template_form_view`),可以通过`ir_model_data`表查询:```sqlSELECT *FROM ir_model_dataWHERE model='ir.ui.view' ANDname='视图的XML ID';```注意:视图的XML ID通常由模块名和视图名组成,例如:`product.product_template_form_view`。3. **通过模块的XML文件**:-如果你有权限访问源代码,可以在模块的XML文件中查找视图定义。视图定义中会有一个`<fieldname="id">`或者使用`id`属性来定义视图的XML ID。例如:```xml<record id="view_product_template_form"model="ir.ui.view"><field name="name">product.template.form</field>...</record>```这里的`view_product_template_form`就是该视图在模块中的XML ID(不带模块名前缀),完整的XML ID是`模块名.view_product_template_form`。4.**通过Odoo命令行(终端)**:-使用Odoo shell(命令行工具)连接到数据库,然后执行:```pythonview =env['ir.ui.view'].search([('name','=','视图名称'),('type', '=', 'form')],limit=1)view_id= view.idview_xml_id =view.get_external_id()[view.id]```注意:`view_xml_id`就是完整的XML ID(例如:`product.view_product_template_form`)。在视图继承的XML中,我们通常使用XMLID来指定`inherit_id`。例如:```xml<recordid="my_module_inherit_view" model="ir.ui.view"><fieldname="name">my.module.inherit</field><field name="model">product.template</field><fieldname="inherit_id" ref="product.view_product_template_form"/>... </record>```因此,查找视图ID的关键是找到该视图的XML ID(外部ID)。在开发者模式下查看是最直接的方法。引用说明:上述方法参考了Odoo开发者文档和常见实践[^1][^2][^3]。现在,为用户生成相关问题:</think>### 在 Odoo 中查找特定视图 ID 的方法 在 Odoo 中进行视图继承时,需要明确指定父视图的 XML ID。以下是查找视图 ID 的几种方法: --- #### 1. **通过开发者模式获取** - **步骤**: 1. 激活开发者模式(设置 → 激活开发者模式) 2. 进入目标视图(如产品表单视图) 3. 点击右上角 🐞 图标 → **"编辑视图"** 4. 浏览器地址栏会显示视图 ID: `http://localhost:8069/web?debug=1#id=42&view_type=form&model=product.template&action=43` 其中 `id=42` 即是视图数据库 ID 5. 视图左上角会显示 **XML ID**(如 `product.product_template_form_view`) --- #### 2. **通过数据库查询** 执行 SQL 查询获取视图 ID: ```sql SELECT imd.name AS xml_id, -- 视图的完整XML ID iv.id AS view_id, -- 数据库ID iv.name AS view_name, iv.type AS view_type FROM ir_ui_view iv LEFT JOIN ir_model_data imd ON imd.res_id = iv.id WHERE imd.model = 'ir.ui.view' AND iv.name = '目标视图名称'; -- 替换为你的视图名称 ``` --- #### 3. **通过 Odoo Shell 获取** 启动 Odoo shell: ```python # 获取视图对象 view = env['ir.ui.view'].search([('name', '=', 'product.template.form')], limit=1) # 输出数据库ID和XML ID print("DB ID:", view.id) print("XML ID:", view.get_external_id()[view.id]) ``` > 输出示例: > `DB ID: 42` > `XML ID: product.product_template_form_view` --- #### 4. **在模块源码中查找** 在自定义或原生模块的 XML 文件中搜索视图定义: ```xml <record id="view_product_template_form" model="ir.ui.view"> <!-- XML ID 在此 --> <field name="name">product.template.form</field> <field name="model">product.template</field> ... </record> ``` > 完整 XML ID = `{模块名}.{record.id}`,如 `product.view_product_template_form` --- #### 继承视图时的正确用法 在继承视图的 XML 中,使用 `ref` 属性引用父视图的 **XML ID**: ```xml <record id="my_inherit_view" model="ir.ui.view"> <field name="inherit_id" ref="product.view_product_template_form"/> <!-- 关键 --> <field name="arch" type="xml"> <xpath expr="//field[@name='name']" position="after"> <field name="new_field"/> </xpath> </field> </record> ``` --- ### 关键注意事项 1. **XML ID 优先于数据库 ID** - 视图继承必须使用完整的 XML ID(格式:`module.view_id`) - 数据库 ID 会因部署环境变化,XML ID 是稳定标识符[^1] 2. **视图名称 ≠ XML ID** - `ir.ui.view.name` 字段是描述性名称(如 `product.template.form`) - XML ID 是技术标识(如 `product.view_product_template_form`) 3. **多继承处理** 若视图已被继承,需检查继承链: ```sql SELECT inherit_id FROM ir_ui_view WHERE id = (当前视图ID); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东木月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值