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__name或customer.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)