code: def search_on(self, *fields, **query):
          
          search_type = list(query.keys())[0]
          parsed_query = self._parse_query_modifier(search_type, query[search_type], False)
          self.add_query([("OR_QRY", dict([(f, parsed_query) for f in fields]), True)])
docs: Search for query on given fields.
  
          Query modifier can be one of these:
              * exact
              * contains
              * startswith
              * endswith
              * range
              * lte
              * gte
  
          Args:
              \*fields (str): Field list to be searched on
              \*\*query:  Search query. While it's implemented as \*\*kwargs
               we only support one (first) keyword argument.
  
          Returns:
              Self. Queryset object.
  
          Examples:
              >>> Person.objects.search_on('name', 'surname', contains='john')
              >>> Person.objects.search_on('name', 'surname', startswith='jo')