docs: def clean_by_fields(self, obj, fields, get_field_fn, exclude_list):
          """
          Function used to exclude defined fields from object collect.
          :param obj: the object we are collecting
          :param fields: every field related to this object (direct or reverse one)
          :param get_field_fn: function used to get accessor for each field
          :param exclude_list: model/fields we have defined to be excluded from collect
          :return: fields that are allowed to be collected
          """
          cleaned_list = []
          obj_model = get_model_from_instance(obj)
  
          for field in fields:
              field_accessor = get_field_fn(field)
              # This field is excluded if:
              # 1/ it's parent model key is in exclude list keys
              # AND
              # 2/ the field has been defined as excluded for this parent model
              is_excluded = obj_model in exclude_list and field_accessor in exclude_list[obj_model]
  
              if not is_excluded:
                  cleaned_list.append(field)
  
          return cleaned_list