Is this the exact code? I notice that the output of the call to 
_custom_search_query gets assigned to the tuple (new_query, 
user_company_exist), but (a) that function does not return a tuple, and (b) 
you don't use new_query when calling the grid.

Anthony

On Wednesday, November 19, 2014 6:16:19 AM UTC-5, Prasad Muley wrote:
>
> Hi All,
>      
>      I want to support multiple keywords search as well as web2py's 
> built-in-search.
>
>      I've written one module which will check if in_built_search is called 
> or not.
>
> *     If in_built_search isn't called then search keywords in 
> custom_module*
>
> *def built_in_search(keywords):*
> *    """This module will return True if opertor*
> *       in built_in_search is used in keywords"""*
> *    search_operators = ['=', '!=', '<', '>', '<=', '>=',*
> *                        'starts with', 'contains', 'in', 'not in']*
> *    return any(operator in keywords for operator in search_operators)*
>
>
>
>  Code of SQLFORM.GRID in *controllers/default.py*
>
>
>  keywords = request.vars.keywords
>
>  if keywords and not built_in_search(keywords):
>
>         new_query, usr_company_exist = _custom_search_query(keywords, 
> field_dicts)
>
>        #field_dicts contains field_name and table attribute.
>
>
>
>  grid = SQLFORM.grid(query, create=allow_create,
>                                     orderby=~db.table_name.created_on,
>                                     showbuttontext=False, csv=False, 
> deletable=False,
>                                     maxtextlengths=textlengths, 
> searchable=True)
>
>
> Here  I am building query according to *request.vars.keywords*
>
> I've written a custom module to search keywords on *selected attributes* 
> as :
> It also searches on reference key (company_name) 
>
>
>
> *def _custom_search_query(keywords, field_dicts):*
> *    """This module will build search each keyword in keywords*
> *       in predefined table attributes"""*
>
> *    keys = keywords.strip()*
> *    user_company_exist = False*
> *    import time*
> *    start_time = time.time()*
> *    filters = []*
> *    print "\n Keywords", keys*
> *    words = keys.split(' ')*
>
> *    for field_name, db_table_attr in field_dicts.iteritems():*
>
> *        #check for company name*
> *        if field_name == 'company_name':*
> *            company = db(db.company.name.contains(keys)).select().first()*
> *            if company is not None:*
> *                filters.append(db_table_attr == company.id 
> <http://company.id>)*
> *                continue*
> *        all_words_filter = []*
>
> *        for word in words:*
> *            all_words_filter.append(db_table_attr.contains(word))*
> *        filters.append(reduce(lambda a, b: (a & b), all_words_filter))*
>
> *    return reduce(lambda a, b: a | b, filters)*
>
>
>
> If I tried to search '*XYZ'* (First_name_of_company) in search box, then *it 
> gives me* *incorrect records.*
> Actually It shows only 3 records.
>
> *I've printed count of query in pdb.*
>
>
> *(Pdb) db(query).count()139L*
> *It is showing exact count as in database.*
>
>
> If I tried to search '*XYZ Private' *(first and middle name of company) 
> in search box, then *It gives me correct records.*
>
> *I've also printed query count in pdb.(Pdb) db(query).count()139L*
> It also shows exact count as in database.
>
> Does any one know why is it giving different results?
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to