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 [email protected].
For more options, visit https://groups.google.com/d/optout.