Hi All,
This is my first time posting a question, so thanks to Massimo and they whole community for making web2py. Its great!
I am trying to export results from a customized full-text search using SQLFORM.grid. My backend is a Postgres db, and I successfully define "search_widget" and "searchable" functions that are passed to the SQLFORM.grid to do the full-text search. It will works pretty well on the web app. However, once I click the export button, SQLFORM.grid apparently recreates the query using the default SQLFORM.build_query and ignores the correct query which I define in searchable. After poking around in sqlhtml.py, I found this is so because the exporter only conditions on request.vars.keywords before calling SQLFORM.build_query, and it does not check for callable(searchable) which I think it should do. In fact, I fixed it by editing sqlhtml.py to force the exporter to condition on (request.vars.keywords and callable(searchable)) before setting up the rows object to export. The code I added is in bold below (on line 2298 of sqlhtml.py):
if request.vars.keywords and callable(searchable):
try:
#the query should be constructed using searchable fields but not virtual fields
sfields = reduce(lambda a, b: a + b,
[[f for f in t if f.readable and not isinstance(f, Field.Virtual)] for t in tables])
dbset = dbset(SQLFORM.build_query(
sfields, request.vars.get('keywords', '')))
rows = dbset.select(left=left, orderby=orderby,
cacheable=True, *selectable_columns)
except Exception, e:
response.flash = T('Internal Error')
rows = []
else:
rows = dbset.select(left=left, orderby=orderby,
cacheable=True, *selectable_columns)
Is this a bug or is there a better way to do an export of customized search results using SQLFORM.grid? I'm using the current version of everything (web2py 2.9.11, Postgres 9.3, Python 2.7.8). Thx again,
dex*