code: def remove_invalid_fields(self, queryset, fields, view, request):
          
          valid_fields = [
              item[0] for item in self.get_valid_fields(queryset, view,
                                                        {'request': request})
          ]
          bad_terms = [
              term for term in fields
              if format_value(term.replace(".", "__").lstrip('-'), "underscore") not in valid_fields
          ]
          if bad_terms:
              raise ValidationError('invalid sort parameter{}: {}'.format(
                  ('s' if len(bad_terms) > 1 else ''), ','.join(bad_terms)))
          # this looks like it duplicates code above, but we want the ValidationError to report
          # the actual parameter supplied while we want the fields passed to the super() to
          # be correctly rewritten.
          # The leading `-` has to be stripped to prevent format_value from turning it into `_`.
          underscore_fields = []
          for item in fields:
              item_rewritten = item.replace(".", "__")
              if item_rewritten.startswith('-'):
                  underscore_fields.append(
                      '-' + format_value(item_rewritten.lstrip('-'), "underscore"))
              else:
                  underscore_fields.append(format_value(item_rewritten, "underscore"))
  
          return super(OrderingFilter, self).remove_invalid_fields(
              queryset, underscore_fields, view, request)
docs: Extend :py:meth:`rest_framework.filters.OrderingFilter.remove_invalid_fields` to
          validate that all provided sort fields exist (as contrasted with the super's behavior
          which is to silently remove invalid fields).
  
          :raises ValidationError: if a sort field is invalid.