That's correct. Once you apply the widget to the field it will be used on all corresponding forms.
On May 21, 11:12 am, annet <annet.verm...@gmail.com> wrote: > I had a quick look at the slice, am I right to conclude that contrary > to the pengoworks autocomplete this one is more generic. When I use > the Pengoworks autocomplete in my model I have to define: > > db.address.city.widget=lambda > self,value:INPUT(_type='text',_id='city',_class='ac_input',_name='city',requires=self.requires) > > ... in web2py_ajax.html: > > jQuery('#city').autocomplete('/init/handlers/cityAC',{maxItemsToShow: > 12}); > > ... in a controller called handlers: > > def cityAC(): > q='' > if request.vars: > q=request.vars.q > if not q: > return q > rows=db(db.city.name.like('%s% > %'%q.capitalize())).select(db.city.name,orderby=db.city.name) > r='' > for row in rows: > r='%s%s\n'%(r,row.name) > return r > > ... and I have to repeat this for every field I need autocomplete > functionality for. > > When I use the one described in the slice, I would put this in db.py: > > def autocomplete_widget(f,v): > import uuid > d_id = "autocomplete-" + str(uuid.uuid4())[:8] > wrapper = DIV(_id=d_id) > inp = SQLFORM.widgets.string.widget(f,v) > rows = f._db(f._table['id']>0).select(f,distinct=True) > itms = [str(t[f.name]) for t in rows] > scr = SCRIPT('var data= "%s".split("|");jQuery("#%s > input").autocomplete(data);' % \ > ("|".join(itms),d_id)) > wrapper.append(inp) > wrapper.append(scr) > return wrapper > > ... which would work both on my laptop and on the webfaction servers!? > > ... put this in the handlers controller: > > def get_items(): > itms = [] > if request.vars.q and \ > request.vars.table and \ > request.vars.field: > q = request.vars.q > f = request.vars.field > t = request.vars.table > fld = db[t][f] > rows = db(fld.upper().like(q.upper() > +"%")).select(fld,distinct=True) > itms = [str(t[f]) for t in rows] > return '\n'.join(itms) > > ... and put this in the table definition: > > db.address.city.widget=autocomplete_widget > > Is that right? > > Kind regards, > > Annet.