def get_field_value(self, obj, field_name):
""" Override if a custom value or behaviour is required for specific fields. """
if '__' not in field_name:
if hasattr(obj, 'all') and hasattr(obj, 'iterator'):
return ','.join([getattr(ro, field_name) for ro in obj.all()])
try:
field = obj._meta.get_field(field_name)
except FieldDoesNotExist as e:
if not hasattr(obj, field_name):
raise e
# field_name is a property.
return getattr(obj, field_name)
value = field.value_from_object(obj)
if field.many_to_many:
return ','.join([six.text_type(ro) for ro in value])
elif field.choices:
if value is None or six.text_type(value).strip() == '':
return ''
return dict(field.choices)[value]
return field.value_from_object(obj)
else:
related_field_names = field_name.split('__')
related_obj = getattr(obj, related_field_names[0])
related_field_name = '__'.join(related_field_names[1:])
return self.get_field_value(related_obj, related_field_name)
评论列表
文章目录