Works like a charm, but the "Clear" button is working exactly like the "Search" one, without clearing 'search_text' before submit Is there another method to do that?
Em segunda-feira, 16 de abril de 2012 23h32min49s UTC-3, Cliff Kachinske escreveu: > > Good one. > > You earned a browser bookmark. > > Thanks. > > On Wednesday, March 7, 2012 4:44:00 AM UTC-5, peter wrote: >> >> As I have commented before, sqlform.grid has a particular way of >> searching. Its combination of search and 'queries' is very powerful. >> However the search does not really work in the way a casual web user >> might expect. If entered - Bob Dylan - in the search box and clicked >> search, then one get 'invalid query'. I eventually worked out how to >> change the search widget, so as I believe this is currently >> undocumented I thought I would share it. The semantics I have chosen >> for search are that it will return records where any of the specified >> fields (fielda and fieldb in the example) contain all of the words in >> the search field. i.e if the search term is -Bob Dylan- it will return >> records that have both Bob and Dylan in the fieldA or both in fieldb. >> >> Define a search function that creates the form and a function that >> does the search >> >> def search_form(self,url): >> form = FORM('', >> >> INPUT(_name='search_text',_value=request.get_vars.search_text, >> _style='width:200px;', >> _id='searchText'), >> INPUT(_type='submit',_value=T('Search')), >> INPUT(_type='submit',_value=T('Clear'), >> _onclick="jQuery('#search_text').val('');"), >> _method="GET",_action=url) >> >> return form >> >> def search_query(tableid,search_text,fields): >> words= search_text.split(' ') if search_text else [] >> query=tableid<0#empty query >> for field in fields: >> new_query=tableid>0 >> for word in words: >> new_query=new_query&field.contains(word) >> query=query|new_query >> return query >> >> Then in the function that has the sqlform.grid call, before the call >> add >> >> search_text=request.get_vars.search_text >> query=search_query(db.tablea.id,search_text, >> [db.tablea.fielda,db.tablea.fieldb]) >> ... >> # the query could now be combined with other queries. >> >> table=SQLFORM.grid(query, search_widget=search_form........) >> >> return dict(table=table) >> >> >> >> >> >> >> >> >> --