如何使用 many2many 连接模型的值计算字段?

How to compute field with values from many2many connected model?

我正在尝试将我的模型中的一个字段计算为与我的模型具有多对多关系的另一个模型的名称的串联:

class p2_vm(models.Model):
    _name = 'p2.vm'
    def _get_hostfunction_names(self):
        names = []
        for id in self.hostfunction_ids:
            names.append(id.name)
        self.functions = ','.join(names)

    hostfunction_id = fields.Many2many('p2.hostfunction')
    functions = fields.Char(compute=_get_hostfunction_names)

其他型号有:

class p2_hostfunction(models.Model):
    _name = 'p2.hostfunction'
    name = fields.Char('Name', required=True)
    vm_id = fields.Many2many('p2.vm')

我怎样才能完成我想要的?

你应该用 @api.multi@api.depends('field_name') 装饰你的计算方法,你最终会得到这样的东西:

@api.multi
@api.depends('hostfunction_id')
def _get_hostfunction_names(self):
    for item in self:
        item.functions = ','.join([x.name for x in item.hostfunction_id])

此外,最好使用字符串声明计算方法而不是传递当前对象,以便在任何情况下都可以轻松覆盖,例如 fields.Char(compute='_get_hostfunction_names').