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.