code: def _search(self, model, condition=None, search_field='name',
                  value_field='id', label_field=None, pagination=True):
          
          from uliweb import json, request
  
          name = request.GET.get('term', '')
          M = functions.get_model(model)
  
          def _v(label_field):
              if label_field:
                  return lambda x: getattr(x, label_field)
              else:
                  return lambda x: unicode(x)
  
          v_field = request.values.get('label', 'title')
          page = int(request.values.get('page') or 1)
          limit = int(request.values.get('limit') or 10)
          v_func = _v(label_field)
          if name:
              if condition is None:
                  condition = M.c[search_field].like('%' + name + '%')
              if pagination:
                  query = M.filter(condition)
                  total = query.count()
                  rows = [{'id': getattr(obj, value_field), v_field: v_func(obj)}
                              for obj in query.limit(limit).offset((page-1)*limit)]
                  result = {'total':total, 'rows':rows}
              else:
                  result = [{'id': getattr(obj, value_field), v_field: v_func(obj)}
                        for obj in M.filter(condition)]
          else:
              result = []
          return json(result)
docs: Default search function
          :param search_field: Used for search field, default is 'name'
          :param value_field: Used for id field, default is id
          :param label_field: Used for label field, default is None, then it'll use unicode() function