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

A.J*_*.J. 8 python callable relational-database models getattr

我有一个模型Project,我得到了以下instr的属性

attr = getattr(project, 'id', None)
Run Code Online (Sandbox Code Playgroud)

project是实例,id是字段,None是默认的返回类型.我的问题是如果我想用这个获得FK键怎么办?

获取客户名称

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

已经尝试过

if callable(attr):
     context[node][field] = '%s' % attr()
Run Code Online (Sandbox Code Playgroud)

现行守则

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
Run Code Online (Sandbox Code Playgroud)

我需要在这里调整客户对象.我可以给类似customer__namecustomer.name在我的领域,并逐渐加入顾客的名字,但我不知道.

alk*_*lko 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))
Run Code Online (Sandbox Code Playgroud)