我有一个模型,我想在其中访问由字符串给出的字段。例子:
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”本身不存在)。知道如何正确做吗?
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)