Odoo:通过名称访问字段(以字符串形式给出)

cgs*_*cgs 2 odoo

我有一个模型,我想在其中访问由字符串给出的字段。例子:

def test(self):
    field = 'name'
    name = getattr(self, field)
Run Code Online (Sandbox Code Playgroud)

这工作正常 - 名称设置为 self.name。但后来我想访问相关领域:

def test2(self):
    field = 'partner_id.name'
    name = getattr(self, field)
Run Code Online (Sandbox Code Playgroud)

这是行不通的(因为“partner_id.name”本身不存在)。知道如何正确做吗?

Lud*_*mer 5

getattr不支持点符号,仅支持简单的属性名称。但是,您可以创建一个简单的函数来执行以下操作:

def getfield(model, field_name):
    value = model
    for part in field_name.split('.'):
        value = getattr(value, part)
    return value
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

def test2(self):
    field = 'partner_id.name'
    name = getfield(self, field)
Run Code Online (Sandbox Code Playgroud)