如何使用模型中的getattr获取外键值

时间:2013-11-27 06:54:56

标签: python relational-database models callable getattr

我有一个模型Project,我正在使用以下instr

获取该属性
attr = getattr(project, 'id', None)

project是实例,id是字段,None是默认返回类型。 我的问题是如果我想用这个获得F.K键呢?

获取客户名称

project.customer.name 如何获得具有上述条件的客户名称?

已经尝试

if callable(attr):
     context[node][field] = '%s' % attr()

当前代码

context = {'project': {}}
fields = ('id', 'name', 'category', 'created_by', customer)

for field in fields:
    attr = getattr(project, field, None)
        if callable(attr):
            context['project'][field] = '%s' % attr()
        else:
            context['project'][field] = attr

我需要在这里调整客户对象。我可以在我的字段中提供类似customer__namecustomer.name的内容,并填充客户名称,但我不确定。

1 个答案:

答案 0 :(得分:15)

您可以执行以下操作:

def get_repr(value): 
    if callable(value):
        return '%s' % value()
    return value

def get_field(instance, field):
    field_path = field.split('.')
    attr = instance
    for elem in field_path:
        try:
            attr = getattr(attr, elem)
        except AttributeError:
            return None
    return attr

for field in fields:
    context['project'][field] = get_repr(get_field(project, field))