Using the builders for the queryset model, iterates over the queryset to generate a result
          with headers and rows. This queryset must be the exact same received in the .process method,
          which tells us that this function should be called inside .process implementation.
        :param queryset: Provided queryset
        :return: Result with headers and rows

def get_report_data_rows(self, request, queryset):
        """
        Using the builders for the queryset model, iterates over the queryset to generate a result
          with headers and rows. This queryset must be the exact same received in the .process method,
          which tells us that this function should be called inside .process implementation.
        :param queryset: Provided queryset
        :return: Result with headers and rows
        """

        model = queryset.model
        meta = model._meta
        field_names = set(field.name for field in meta.fields)
        list_report = self.get_list_report(request) or field_names
        queried_field_named = [l for l in list_report if l in field_names] or ['id']

        columns = self.get_report_column_builders(request, model)
        headers = [column.header for column in columns]
        rows = []
        for instance in queryset.only(*queried_field_named):
            rows.append([column.fetcher(instance) for column in columns])

        return TrackingReportResult(headers=headers, values=rows)