docs: def report_to_list(queryset, display_fields, user):
      """ Create list from a report with all data filtering.
  
      queryset: initial queryset to generate results
      display_fields: list of field references or DisplayField models
      user: requesting user
  
      Returns list, message in case of issues.
      """
      model_class = queryset.model
      objects = queryset
      message = ""
  
      if not _can_change_or_view(model_class, user):
          return [], 'Permission Denied'
  
      # Convert list of strings to DisplayField objects.
      new_display_fields = []
  
      for display_field in display_fields:
          field_list = display_field.split('__')
          field = field_list[-1]
          path = '__'.join(field_list[:-1])
  
          if path:
              path += '__'  # Legacy format to append a __ here.
  
          df = DisplayField(path, field)
          new_display_fields.append(df)
  
      display_fields = new_display_fields
  
      # Display Values
      display_field_paths = []
  
      for i, display_field in enumerate(display_fields):
          model = get_model_from_path_string(model_class, display_field.path)
  
          if not model or _can_change_or_view(model, user):
              display_field_key = display_field.path + display_field.field
  
              display_field_paths.append(display_field_key)
  
          else:
              message += 'Error: Permission denied on access to {0}.'.format(
                  display_field.name
              )
  
      values_list = objects.values_list(*display_field_paths)
      values_and_properties_list = [list(row) for row in values_list]
  
      return values_and_properties_list, message