我有一个模型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__name
或customer.name
的内容,并填充客户名称,但我不确定。
答案 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))