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
相关产品推荐
相关产品推荐

