此处提出了类似的问题:Access Django model's fields using a string instead of dot syntax?
我希望能够基于动态生成的字符串访问django模型中与外键相关的字段的值。例如,要获得直接字段值,您可以使用:
getattr(instance, 'name')
但我希望能够遵循外键关系,也许是这样:
model_getattr(instance, 'name__othername')
这将需要另一个查询,并且可以通过在' __'上拆分属性字符串来编写函数model_getattr。但我很想知道是否有正确的"这样做的方法?它甚至可能吗?
更新:
我设法编写了一个功能,可以满足我的需求,但我仍然想知道是否有首选方式。这个解决方案显然没有那么高效,但它现在有效:
def get_attribute(instance, name):
if hasattr(instance, name):
return getattr(instance, name)
names = name.split('__')
name = names.pop(0)
if len(names) == 0:
return None
if hasattr(instance, name):
value = getattr(instance, name)
return get_attribute(value, '__'.join(names))
return None