使用字符串访问模型的外键相关字段?

时间:2013-12-17 06:01:17

标签: django django-models

此处提出了类似的问题: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

1 个答案:

答案 0 :(得分:2)

我认为你需要在下面的线程

中讨论过的东西

How to get foreign key values with getattr from models