【问题标题】:Getting a KeyError when passing data to a Wizard in odoo 10将数据传递给odoo 10中的向导时出现KeyError
【发布时间】:2020-02-08 19:31:18
【问题描述】:

我正在使用上下文向我的向导发送数据,但我总是收到此错误“KeyError: 'default_new_name”

我尝试做示例 here 但仍然遇到同样的错误 这是我的代码

模型创建向导

@api.multi
def open_x2m_matrix(self):

    wiz = self.env['x2m.matrix.demo.wiz'].create({})
    return {
        'name': self.name,
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'x2m.matrix.demo.wiz',
        'target': 'new',
        'res_id': wiz.id,
        'context': self.env.context,
        'context': {'default_new_name': self.name},
    }

模型创建二维矩阵

line_ids = fields.Many2many(
    'x2m.demo.line', default=lambda self: self._default_line_ids())
def _default_line_ids(self):
    recs =self.env['x2m.demo'].search([("name","!=",self._context['default_new_name'])])
    # same with users
    users = self.env['x2m.demo.line'].search([]).mapped('new_user_id')
    return [
        (0, 0, {
            'demo_id': rec.id,
            'new_user_id': usr.id,
            'value': 0,
        })
        # if the project doesn't have a task for the user, create a new one
        if not rec.line_ids.filtered(lambda x: x.new_user_id == usr) else
        # otherwise, return the task
        (4, rec.line_ids.filtered(lambda x: x.new_user_id == usr)[0].id)
        for rec in recs
        for usr in users
    ]

【问题讨论】:

  • new_name 是否存在于x2m.matrix.demo.wiz 模型中?顺便说一句,您不能在字典中使用两个具有相同名称的键。您应该创建一个冻结字典 context 的副本,更新第一个以将您的 default_new_name 键添加到其中,然后将其发送到返回的字典中。

标签: odoo odoo-10 wizard


【解决方案1】:

create 已经在调用line_ids 的默认方法。因此,您要么不创建向导记录,而只在没有 ID 的情况下调用,要么在右行使用上下文标志创建它:

  1. 打开向导而不创建向导
@api.multi
def open_x2m_matrix(self):
    context = dict(self.env.context or {})
    context.update({'default_new_name': self.name})
    return {
        'name': self.name,
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'x2m.matrix.demo.wiz',
        'target': 'new',
        # 'res_id': wiz.id,  # not needed
        'context': context
    }
  1. 在创建时使用上下文标志,因为这是真正需要的调用
@api.multi
def open_x2m_matrix(self):

    wiz = self.env['x2m.matrix.demo.wiz'].with_context(
        default_new_name=self.name).create({})
    return {
        'name': self.name,
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'x2m.matrix.demo.wiz',
        'target': 'new',
        'res_id': wiz.id,
        'context': self.env.context,
    }

【讨论】:

  • 抱歉没有看到 with_context 解决方案,有人认为当您在向导中创建记录时,我认为按钮将被禁用?
  • 感谢您的回答,所有解决方案都在起作用,你救了我的命
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多