Cristina

I'd look at adding a 'left' argument on my query.select().

if search_value and search_value != '' and search_value != 0:
    queries.append((db.Student.firstname.contains(search_value)) | 
                   (db.Student.lastname.contains(search_value)) |
                   (db.Student.phone.contains(search_value)) |
                   (db.Nationality.descripcion.contains(search_value))

query = reduce(lambda a, b: (a & b), queries)
query.select(left=db.Nationality.on(db.Student.nationality == db.Nationality
.id))

The above should give you the rows where the search text matches firstname 
or lastname or phone or nationality description.  You may want to change 
that to 'and' instead of 'or' depending on your requirements.

Make sense?

-Jim



On Sunday, June 16, 2019 at 8:36:09 PM UTC-5, Cristina Sig wrote:
>
> Hello,
>
> I'm a newbie on python language so I'm struggling to do some queries.
> I have a table Student which I use to fill a table on view, above that 
> table, I have a search box, where I would like to provide the option to 
> search in multiple columns (phone, last name, first name, or nationality).
> I don't know how exactly do a dynamic query in this case because I have 
> some fields which are references from other tables.
>
> This is my Db
> db.define_table('Nationality',
>                 Field('descripcion', 'string'),
>                )
>
> db.define_table('Grade',
>                 Field('level', 'string'),
>                )
>
> db.define_table('Student',
>                 Field('lastname', 'string'),
>                 Field('firstname', 'string'),
>                 Field('nationality','reference Nationality'),
>                 Field('phone', 'integer'),
>                 Field('email', 'string'),
>                 Field('gradelevel','reference Grade'),
>                )
>
> and this is my try so far
> queries = [(db.Student.id > 0)]
>     if search_value and search_value != '' and search_value != 0:
>         queries.append(db.Student(search_value))  
>         query = reduce(lambda a,b:(a&b),queries) 
>
>         query.select()
>
>
>
> I found a generic way to do it but still don't know how to deal with 
> references.
> Any suggestion/idea would be very appreciated :)
>
> queries=[]if arg1 == "xyz": queries.append(db.abc.id > 0)if arg2 == "xyz": 
> queries.append(db.def.id > 0)query = reduce(lambda 
> a,b:(a&b),queries)query.select()
>
>
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/df34641b-50b8-425d-b845-59b77c9c7710%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to