Hi Peter,
Just to say thank you so much for your posting this, and with this help I
did get it working OK.
@Book Editor. In the absence of other documentation, perhaps this example
ought to be mentioned in the book?
Thanks, David
On Wednesday, 7 March 2012 09:44:00 UTC, 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)
>
>
>
>
>
>
>
>
>