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.

Reply via email to