将数据传递给 odoo 10 中的向导时出现 KeyError
Getting a KeyError when passing data to a Wizard in odoo 10
我正在使用上下文向我的向导发送数据,但我总是收到此错误"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
]
create
已经在调用 line_ids
的默认方法。因此,您应该要么不创建向导记录而只是在没有 ID 的情况下调用,要么在右行使用上下文标志创建它:
- 打开向导而不创建向导
@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
}
- 在创建时使用上下文标志,因为这是真正需要它的调用
@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,
}
我正在使用上下文向我的向导发送数据,但我总是收到此错误"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
]
create
已经在调用 line_ids
的默认方法。因此,您应该要么不创建向导记录而只是在没有 ID 的情况下调用,要么在右行使用上下文标志创建它:
- 打开向导而不创建向导
@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
}
- 在创建时使用上下文标志,因为这是真正需要它的调用
@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,
}