i have a model Project
and i am getting the attributes of that with the following instr
attr = getattr(project, 'id', None)
project
is the instance, id
is the field and None
is the default return type.
my question is what if i want to get the F.K keys with this?
Get customer name
project.customer.name
How to get customer name with the above condition?
Already Tried
if callable(attr):
context[node][field] = '%s' % attr()
Current Code
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
i need to adjust customer object here. that i can give something like customer__name
or customer.name
in my fields and it get populated with the name of the customer, but i am not sure.
You can do something like follows:
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))
来源:https://stackoverflow.com/questions/20235807/how-to-get-foreign-key-values-with-getattr-from-models