def _collect_relationship(self, main_infos, prop, result):
        """
        collect a relationship header:

        * One To many : if {'export': {'reletad_key': 'remote_attr'}} is
            provided, we take all the related objects and join their remote
            attr's value with commas
            If an index is provided, only the related element of index 'index'
            is retrieved and it's attr value is returned
            In case of excel exports, a specific sheet is generated by table
            (see excel.py for more details)

        * Many To One :

            If a related_key is provided, we remove the associated foreign key
            from the output (we collect its associated title) and only the given
            key of the associated object will be exported
            If no related_key is provided, we use the relationship's title as
            prefix and for each attribute of the related object, we add a column

        :param dict main_infos: The already collected datas about this column
        :param obj prop: The property mapper of the relationship
        :param list result: The actual collected headers
        :returns: a dict with the datas matching this header
        """
        # No handling of the uselist relationships for the moment
        # Maybe with indexes ? ( to see: on row add, append headers on the fly
        # if needed )
        if prop.uselist:
            # One to many
            pass
        else:
            if "related_key" in main_infos:
                self._merge_many_to_one_field(main_infos, prop, result)
            else:
                related_field_inspector = BaseSqlaInspector(prop.mapper)
                main_infos_list = []

                for column in related_field_inspector.get_columns_only():
                    infos = self._get_prop_infos(column)
                    if self._is_excluded(column, infos):
                        continue

                    infos['label'] = u"%s %s" % (
                        main_infos['label'], infos['label']
                    )
                    infos['__col__'] = main_infos['__col__']
                    infos['name'] = "%s %s" % (main_infos['name'], column.key)
                    infos['key'] = main_infos['key']
                    infos['related_key'] = column.key
                    main_infos_list.append(infos)
                return main_infos_list

        return main_infos
collect a relationship header:

        * One To many : if {'export': {'reletad_key': 'remote_attr'}} is
            provided, we take all the related objects and join their remote
            attr's value with commas
            If an index is provided, only the related element of index 'index'
            is retrieved and it's attr value is returned
            In case of excel exports, a specific sheet is generated by table
            (see excel.py for more details)

        * Many To One :

            If a related_key is provided, we remove the associated foreign key
            from the output (we collect its associated title) and only the given
            key of the associated object will be exported
            If no related_key is provided, we use the relationship's title as
            prefix and for each attribute of the related object, we add a column

        :param dict main_infos: The already collected datas about this column
        :param obj prop: The property mapper of the relationship
        :param list result: The actual collected headers
        :returns: a dict with the datas matching this header