Are you getting an error on the referenced field (Nationality) or is it just not returning the results you're expecting?
-Jim On Monday, June 17, 2019 at 4:46:14 PM UTC-5, Cristina Sig wrote: > > 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/be7c2c8e-b73a-4858-ab55-7054a7990274%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

