【发布时间】:2013-12-17 06:01:17
【问题描述】:
这里提出了类似的问题: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
【问题讨论】:
标签: django django-models