Получение ключевой ошибки при передаче данных в мастер в odoo 10 - PullRequest
2 голосов
/ 11 октября 2019

Я использую контекст для отправки данных своему мастеру, но я всегда получаю эту ошибку "KeyError: 'default_new_name"

Я пытался сделать пример здесь , но все еще получаюта же ошибка, вот мой код

модель создания мастера

@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},
    }

модель создания 2d матрицы

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
    ]

1 Ответ

2 голосов
/ 11 октября 2019

create уже вызывает метод по умолчанию для line_ids. Таким образом, вы не должны создавать запись мастера и просто вызывать без идентификатора, или вы создаете ее с вашим контекстным флагом в правой строке:

  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
    }
используйте ваш контекстный флаг при создании, потому что это вызов, где он действительно нужен
@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,
    }
...