Returns builders for column names and column values
          for the elements, being each element like this:
          1. A header fetcher: will retrieve the title for the column.
          2. A value fetcher: will retrieve the value for the column.
        :param model: model to analyze and fetch.
        :param request: current request being processed.
        :return: A list of TrackingReportColumn pairs.

def get_report_column_builders(self, request, model):
        """
        Returns builders for column names and column values
          for the elements, being each element like this:
          1. A header fetcher: will retrieve the title for the column.
          2. A value fetcher: will retrieve the value for the column.
        :param model: model to analyze and fetch.
        :param request: current request being processed.
        :return: A list of TrackingReportColumn pairs.
        """

        meta = model._meta
        field_names = set(field.name for field in meta.fields)
        list_report = self.get_list_report(request) or field_names
        _s = self._cell_value

        def header(list_report_item):
            if list_report_item in field_names:
                return text_type(capfirst(meta.get_field(list_report_item).verbose_name))
            else:
                if isinstance(list_report_item, string_types):
                    # model member (method or property)
                    model_member = getattr(model, list_report_item, None)
                    # method check
                    if functions.is_method(model_member, functions.METHOD_UNBOUND|functions.METHOD_INSTANCE):
                        return text_type(capfirst(getattr(model_member, 'short_description',
                                                          list_report_item.replace('_', ' '))))
                    # property check
                    if isinstance(model_member, property):
                        if model_member.getter:
                            return text_type(capfirst(getattr(model_member, 'short_description',
                                                              list_report_item.replace('_', ' '))))
                        raise ValueError('Property item in `list_report` member, or returned by `get_list_report()` '
                                         'must be readable')
                    # report member (method)
                    report_member = getattr(self, list_report_item, None)
                    if functions.is_method(report_member, functions.METHOD_UNBOUND|functions.METHOD_INSTANCE):
                        return text_type(capfirst(getattr(report_member, 'short_description',
                                                          list_report_item.replace('_', ' '))))

                # regular callable
                if callable(list_report_item):
                    return text_type(capfirst(getattr(list_report_item, 'short_description', None) or
                                              getattr(list_report_item, '__name__', None) or '<unknown>'))

                # invalid value
                raise TypeError('Item in `list_report` member, or returned by `get_list_report()` must be a model '
                                'field name, or model instance method, current report''s instance method, or '
                                'a regular callable')

        def fetcher(list_report_item):
            if list_report_item in field_names:
                return lambda obj: _s(getattr(obj, list_report_item))
            else:
                if isinstance(list_report_item, string_types):
                    # model member (method or property)
                    model_member = getattr(model, list_report_item, None)
                    # method check
                    if functions.is_method(model_member, functions.METHOD_UNBOUND|functions.METHOD_INSTANCE):
                        return lambda obj: _s(getattr(obj, list_report_item)())
                    # property check
                    if isinstance(model_member, property):
                        if model_member.getter:
                            return lambda obj: _s(getattr(obj, list_report_item))
                        raise ValueError('Property item in `list_report` member, or returned by `get_list_report()` '
                                         'must be readable')
                    # report member (method)
                    report_member = getattr(self, list_report_item, None)
                    if functions.is_method(report_member, functions.METHOD_UNBOUND|functions.METHOD_INSTANCE):
                        return lambda obj: _s(getattr(self, list_report_item)(obj))

                # regular callable
                if callable(list_report_item):
                    return lambda obj: _s(list_report_item(obj))

                # invalid value
                raise TypeError('Item in `list_report` member, or returned by `get_list_report()` must be a model '
                                'field name, or model instance method, current report''s instance method, or '
                                'a regular callable')

        return [TrackingReportColumn(header=header(item), fetcher=fetcher(item)) for item in list_report]