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

Odoo 13中如何将字段值传递至向导?技术求助

解决Odoo 13中向向导传递字段值的问题

首先看你当前的create_field方法有几个小问题,比如重复设置了res_id,而且没有传递你需要的name字段(也就是选中的hr.employee记录)到向导里。下面一步步帮你解决:

1. 修正动作方法(Python代码)

你需要在动作的context里传递选中的员工ID,或者直接在defaults里设置向导对应字段的默认值。修改后的方法如下:

def create_field(self):
    # 确保当前记录的name字段有值(因为required=True,所以这里应该不会为空)
    if not self.name:
        return {}
    return {
        'name': '向导标题',  # 可以自定义向导窗口标题
        'view_mode': 'form',
        'res_model': 'dieu.chinh',
        'view_id': False,
        'context': {
            # 传递选中的员工ID到向导的上下文,Odoo会自动识别default_开头的键作为默认值
            'default_employee_id': self.name.id,
            # 如果向导里字段名不是employee_id,换成你实际的字段名
        },
        'target': 'new',  # 一般向导用new弹窗,current会替换当前视图,可根据需求调整
        'type': 'ir.actions.act_window',
        'flags': {'form': {'action_buttons': True, 'options': {'mode': 'edit'}}},
    }

2. 确保向导模型(dieu.chinh)有对应的字段

你需要在向导模型里添加一个和源字段对应的关联字段,比如:

from odoo import models, fields

class DieuChinh(models.TransientModel):
    _name = 'dieu.chinh'
    _description = '调整向导'

    # 添加对应的Many2one字段,关联hr.employee
    employee_id = fields.Many2one('hr.employee', string="选中的用户")
    # 其他你需要的业务字段...

3. 调整向导的表单视图(XML)

确保你的向导表单视图里包含这个employee_id字段,根据需求设置是否可编辑:

<record id="dieu_chinh_form_view" model="ir.ui.view">
    <field name="name">dieu.chinh.form</field>
    <field name="model">dieu.chinh</field>
    <field name="arch" type="xml">
        <form string="调整向导">
            <group>
                <!-- 这里显示传递过来的员工值,readonly设为1表示不可修改 -->
                <field name="employee_id" readonly="1"/>
                <!-- 其他业务字段 -->
            </group>
            <footer>
                <button string="确认" type="object" name="action_confirm" class="oe_highlight"/>
                <button string="取消" class="oe_link" special="cancel"/>
            </footer>
        </form>
    </field>
</record>

备选方案:用default_get方法获取上下文值

如果你的业务场景更复杂,也可以重写向导模型的default_get方法来从上下文取值:

def default_get(self, fields_list):
    res = super(DieuChinh, self).default_get(fields_list)
    # 从上下文获取传递的员工ID
    employee_id = self.env.context.get('current_employee_id')
    if employee_id and 'employee_id' in fields_list:
        res['employee_id'] = employee_id
    return res

这时候你的动作方法里的context需要改成:

'context': {'current_employee_id': self.name.id},

原代码的问题复盘

  • 重复设置res_id:res_id: wiz.id和res_id : self.id会导致冲突,向导属于临时模型(TransientModel),一般不需要预先设置res_id,除非你要打开已存在的向导记录。
  • 传递的current_id是当前模型1的记录ID,而非选中的hr.employee的ID,导致向导无法获取到目标员工值。

这样修改后,点击按钮打开向导时,employee_id字段就会自动填充你之前选中的用户了。

内容的提问来源于stack exchange,提问作者Leon Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:08