Anthony, being so helpful as you are, you need by no means to apologize. Thank you so much. Best regards.
El martes, 6 de junio de 2017, 21:15:29 (UTC+2), Anthony escribió: > > Sorry, I forgot about that -- you can in fact use a virtual field. > However, for it to work properly, you must specify the table name when > defining the virtual field: > > db.auth_user.full_name = Field.Virtual('full_name', > lambda row: '%s %s' %(row.auth_user > .first_name, > row.auth_user > .last_name), > table_name='auth_user') > > Also, note that when you use a virtual field with autocomplete, it selects > all records (and all fields) in the table and does the filtering in Python, > so this could be quite slow for large tables. > > Anthony > > On Tuesday, June 6, 2017 at 9:51:33 AM UTC-4, Carlos Kitu wrote: >> >> 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.