You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo中按钮name="%(window_action)d"机制及变体配置按钮解析

Odoo产品模板「配置变体」按钮工作机制及动作识别解析

一、按钮核心语法解析

你给出的按钮代码里,name="%(product_attribute_value_action)d"是Odoo特有的外部ID插值语法:

  • %(external_id):表示引用对应外部ID的系统记录,这里的product_attribute_value_action是目标ir.actions.act_window动作的外部ID(当前在product模块视图中,Odoo会自动补全模块前缀product,完整外部ID为product.product_attribute_value_action)。
  • d:是整数格式符,Odoo加载视图时,会把该外部ID对应的动作记录的数据库ID替换到这个位置,最终按钮的name属性会变成该动作的数字ID。

二、Odoo识别外部ID的流程

  1. 模块加载阶段:Odoo会把所有模块中定义的外部ID(无论XML还是Python代码创建)与对应数据库记录建立映射,存在ir_model_data表中。
  2. 视图渲染阶段:加载产品模板视图时,Odoo解析%(external_id)d语法,通过ir_model_data表找到product.product_attribute_value_action对应的ir.actions.act_window记录,取出其ID替换到按钮的name属性里。
  3. 按钮触发阶段:点击按钮时,Odoo根据替换后的动作ID,匹配对应的窗口动作配置,打开产品属性变体配置界面。

三、找不到动作声明的原因

这个动作并非XML静态定义,而是Python代码动态创建的:

  • 在product模块中,它通常是模块安装/初始化时,通过env['ir.actions.act_window'].create()方法创建,或是在product.template模型的相关逻辑中动态关联生成。
  • 你可以通过两种方式确认它的存在:
    • 后台操作:进入「设置 > 技术 > 动作 > 窗口动作」,搜索product_attribute_value_action,查看该动作的绑定模型、视图等详细配置。
    • 数据库查询:执行SQL语句 SELECT id, name, res_model FROM ir_act_window WHERE ref = 'product.product_attribute_value_action';,直接从数据库获取该动作的记录信息。

四、按钮显示逻辑补充

按钮的attrs属性控制显示规则:

  • 当产品模板的attribute_line_ids(属性行)数量≤0,或是当前记录为产品变体(is_product_variant=True)时,按钮隐藏。
  • 仅拥有product.group_product_variant权限组的用户能看到该按钮。

内容的提问来源于stack exchange,提问作者Firman Azis Rauf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:10:07