def search_on(self, *fields, **query):
clone = copy.deepcopy(self)<EOL>clone.adapter.search_on(*fields, **query)<EOL>return clone<EOL>
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')