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.

Reply via email to