Thanks a lot, Anthony.
I use to check the framework code before posting questions, and when I saw 
this in the callback method of the autocomplete widget:
def callback(self): 
    if self.keyword in self.request.vars: 
        field = self.fields[0] 
        if type(field) is Field.Virtual: 
            records = [] 
            table_rows = self.db(self.db[field.tablename]).select(orderby=
self.orderby)

I guessed wrongly that virtual fields were supported.
Thank you and best regards.

El lunes, 5 de junio de 2017, 17:11:37 (UTC+2), Anthony escribió:
>
> You cannot use autocomplete to search a virtual field. It runs a database 
> query, so the field must exist in the database.
>
> Anthony
>
> On Monday, June 5, 2017 at 9:23:51 AM UTC-4, Carlos Kitu wrote:
>>
>> Good afternoon,
>> I'm trying to create an autocomplete field to search in the table 
>> db.auth_user, but the search must be done with the full name.
>> As db.auth_user has two separate fields (first_name, and last_name), I 
>> created a virtual field to compose both fields:
>>
>> db.auth_user.full_name = Field.Virtual('full_name', lambda row: '%s %s' 
>> %(row.auth_user.first_name, row.auth_user.last_name))
>>
>> Then, I used the autocomplete widget in a field:
>>
>> db.define_table('my_table',
>>  Field('my_user', 'reference auth_user', notnull=True, unique=False, 
>> label='User'),
>>  ...
>> )
>>
>>
>> db.my_table.my_user.widget = SQLFORM.widgets.autocomplete(
>>         request, db.auth_user.full_name, id_field=db.auth_user.id, db=db,
>>         at_beginning=False, limitby=(0, 10), min_length=2)
>>
>>
>>
>> And I get this error when creating a new form:
>>
>> <type 'exceptions.AttributeError'> 'DAL' object has no attribute 'None'
>> Versión
>> web2py™ Version 2.14.6-stable+timestamp.2016.05.10.00.21.47Rastreo
>>
>> 1.
>> 2.
>> 3.
>> 4.
>> 5.
>> 6.
>> 7.
>> 8.
>> 9.
>> 10.
>> 11.
>> 12.
>> 13.
>> 14.
>> 15.
>> 16.
>> 17.
>> 18.
>> 19.
>> 20.
>> 21.
>> 22.
>>
>> Traceback (most recent call last):
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/restricted.py", 
>> line 227, in restricted
>>     exec ccode in environment
>>   File 
>> "/home/clm/Documentos/p/productos/web2py_2.14.6/applications/VREscalas/controllers/default.py"
>>  
>> <https://127.0.1.1:8000/admin/default/edit/VREscalas/controllers/default.py>,
>>  line 1119, in <module>
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/globals.py", 
>> line 417, in <lambda>
>>     self._caller = lambda f: f()
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/tools.py", line 
>> 4241, in f
>>     return action(*a, **b)
>>   File 
>> "/home/clm/Documentos/p/productos/web2py_2.14.6/applications/VREscalas/controllers/default.py"
>>  
>> <https://127.0.1.1:8000/admin/default/edit/VREscalas/controllers/default.py>,
>>  line 140, in programas
>>     lambda row: A('resumen', _href=URL(
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/sqlhtml.py", 
>> line 2307, in grid
>>     create_form = SQLFORM(table, **sqlformargs)
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/sqlhtml.py", 
>> line 1288, in __init__
>>     inp = field.widget(field, default)
>>   File "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/sqlhtml.py", 
>> line 748, in __call__
>>     table_rows = 
>> self.db(self.db[self.fields[0].tablename]).select(orderby=self.orderby)
>>   File 
>> "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/packages/dal/pydal/base.py",
>>  line 914, in __getitem__
>>     return self.__getattr__(str(key))
>>   File 
>> "/home/clm/Documentos/p/productos/web2py_2.14.6/gluon/packages/dal/pydal/base.py",
>>  line 921, in __getattr__
>>     return BasicStorage.__getattribute__(self, key)
>> AttributeError: 'DAL' object has no attribute 'None':
>>
>>
>> I printed in console the self.fields[0]:
>> self.fields {'comment': None, 'represent': <function <lambda> at 
>> 0x7f6c907310c8>, 'widget': None, 'name': 'full_name', 'f': <function 
>> <lambda> at 0x7f6c90731050>, 'requires': None, 'readable': True, 'label': 
>> 'Full 
>> name', 'writable': False, 'filter_out': None, 'tablename': None, 
>> 'formatter': <function IDENTITY at 0x7f6c9e090140>, 'type': 'string'}
>>
>> It happens that the db.auth_user.full_name.tablename is None, i.e., the 
>> virtual field have no tablename attibute as the autocomplete code seems to 
>> expect.
>> Should I open a ticket?
>>
>> Thank you and best regards.
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to