Autocomplete como buscar en medio de una cadena

65 views
Skip to first unread message

isi_jca

unread,
May 10, 2017, 8:25:36 AM5/10/17
to web2py-usuarios
Hola Gente!!!

1°)

Estoy usando el widget de auto completado de la siguiente manera:

    db.tpersona.idprovincia.widget = SQLFORM.widgets.autocomplete(request, db.trprovincia.descripcion,
                                                                  id_field=db.trprovincia.id, limitby=(0,20), min_length=2 )

Funciona bien, el tema es que no me permite buscar el contenido en el medio de una cadena, por ejemplo:

Si  tuviera la provincia "Santa Cruz", mi idea es escribir "Cru" y debería mostrarme "Santa Cruz". ¿Alguien tiene alguna sugerencia?.

2°) También intente implementar la siguiente receta: http://www.web2pyslices.com/slice/show/1391/jquery-autocomplete-widget

response.files.append(URL(r=request,c='static/jquery-autocomplete',f='jquery.autocomplete.js'))
response.files.append(URL(r=request,c='static/jquery-autocomplete',f='jquery.autocomplete.css'))

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)

def autocomplete_widget(f,v):
    import uuid
    
    d_id = "autocomplete-" + str(uuid.uuid4())[:8]
    get_url = URL(r=request,c='default',f='get_items')
    wrapper = DIV(_id=d_id)
    inp = SQLFORM.widgets.string.widget(f,v)
    scr = SCRIPT('jQuery("#%s input").autocomplete("%s",{extraParams:{field:"%s",table:"%s"}});' % \
                  (d_id, get_url,f.name,f._tablename))
    
    
    wrapper.append(inp)
    wrapper.append(scr)
    return wrapper

def abmpersona():
    query = (db.tpersona.id > 0)

    db.tpersona.idprovincia.widget = autocomplete_widget(db.trprovincia.descripcion,db.trprovincia.id)

    grid = SQLFORM.grid(query,field_id = db.tpersona.id)
    return locals()


Pero obtengo el siguiente error:

Error ticket for "Tester"
Ticket ID
127.0.0.1.2017-05-10.08-44-36.08989307-1cf8-4970-b9d8-632c417c8ab8

<type 'exceptions.TypeError'> 'DIV' object is not callable

Versión
web2py™ Version 2.14.6-stable+timestamp.2016.05.10.00.21.47
Python Python 2.7.13: /usr/bin/python (prefix: /usr)
Rastreo
14.
Traceback (most recent call last):
  File "/home/jalbornoz/web2py/gluon/restricted.py", line 227, in restricted
    exec ccode in environment
  File "/home/jalbornoz/web2py/applications/Tester/controllers/default.py", line 99, in <module>
  File "/home/jalbornoz/web2py/gluon/globals.py", line 417, in <lambda>
    self._caller = lambda f: f()
  File "/home/jalbornoz/web2py/applications/Tester/controllers/default.py", line 96, in abmpersona
    grid = SQLFORM.grid(query,field_id = db.tpersona.id)
  File "/home/jalbornoz/web2py/gluon/sqlhtml.py", line 2303, in grid
    create_form = SQLFORM(table, **sqlformargs)
  File "/home/jalbornoz/web2py/gluon/sqlhtml.py", line 1286, in __init__
    inp = field.widget(field, default)
TypeError: 'DIV' object is not callable
Error snapshot  help
<type 'exceptions.TypeError'>('DIV' object is not callable)

¿Alguna idea de por qué se genera este error?.

Saludo cordiales.

isi_jca

unread,
May 14, 2017, 1:47:21 PM5/14/17
to web2py-usuarios
Hola gente!

Leyendo en http://web2py.readthedocs.io/en/latest/_modules/gluon/sqlhtml.html descubrí que el widget tiene el parámetro "at_beginning" cuando el mismo es establecido en False, es posible buscar en medio de una cadena.

Ejemplo:

db.tpersona.idprovincia.widget = SQLFORM.widgets.autocomplete(request, db.trprovincia.descripcion, id_field=db.trprovincia.id, limitby=(0,20), min_length=2, at_beginning = False)
Saludos cordiales.
0
 
0
Auto Generated Inline Image 1
Auto Generated Inline Image 2

Marco Antonio Castro Collazos

unread,
Nov 5, 2017, 2:02:28 PM11/5/17
to web2py-usuarios
Creo que esto te puede servir:

cambia la instrucion like por ilike

con esto busca sin importar  min/may....


Reply all
Reply to author
Forward
0 new messages