'Recursive method that looks, for one or more objects, for an attribute that can be multiple
objects (relations) deep.'

def resolve_attributes_lookup(self, current_objects, attributes):

    values = []
    for current_object in current_objects:
        if (not hasattr(current_object, attributes[0])):
            raise SearchFieldError((u"The    model    '%s'    does    not    have    a    model_attr    '%s'." % (repr(current_object), attributes[0])))
        if (len(attributes) > 1):
            current_objects_in_attr = self.get_iterable_objects(getattr(current_object, attributes[0]))
            return self.resolve_attributes_lookup(current_objects_in_attr, attributes[1:])
        current_object = getattr(current_object, attributes[0])
        if (current_object is None):
            if self.has_default():
                current_object = self._default
            elif self.null:
                current_object = None
            else:
                raise SearchFieldError((u"The    model    '%s'    combined    with    model_attr    '%s'    returned    None,    but    doesn't    allow    a    default    or    null    value." % (repr(current_object), self.model_attr)))
        if callable(current_object):
            values.append(current_object())
        else:
            values.append(current_object)
    return values
