thanks! I solved the integer field but it seems that the referenced fields are not working. I will try to see what is the issue with them
El lunes, 17 de junio de 2019, 18:05:18 (UTC-3), Jim S escribió: > > I'm guessing it's the phone number field. You can't use 'contains' on a > numeric field. So, try this: > > if search_value and search_value != '' and search_value != 0: > try: > int_search_value = int(search_value) > queries.append((db.Student.firstname.contains(search_value)) | > (db.Student.lastname.contains(search_value)) | > (db.Student.phone == int_search_value) | > (db.Nationality.descripcion.contains(search_value)) > > except: > queries.append((db.Student.firstname.contains(search_value)) | > (db.Student.lastname.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)) > > Basically, if you can convert the search_value to an int, you want to > check the phone number against the int as well. If you can't convert to an > int, then don't include phone number in the search. > > The datatables error is not very helpful. What you want to look at is the > error that web2py is generating to confirm that it is the phone number like > I think it is. > > -Jim > > On Monday, June 17, 2019 at 3:44:27 PM UTC-5, Cristina Sig wrote: >> >> Hello Jim, >> >> I tried the code and it shows me an error >> >> *DataTables warning: table id=tableStudent - Ajax error. For more >> information about this error, please see http://datatables.net/tn/7 >> <http://datatables.net/tn/7>* >> >> I think it is not recognising the numeric field or the referenced ones >> >> >> El lunes, 17 de junio de 2019, 11:30:45 (UTC-3), Jim S escribió: >>> >>> 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/9d371568-5a8c-4fc9-a87a-af6ef9ba682d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

