Hi,
I'm posting this in the hope it could be useful for someone.

I've the need to use a virtual field in an autocomplete widget, to show 
hierarchy of a reference, something like
Field.Virtual('fv_full_name',lambda row,alt=None : row.t_table.f_name if not 
row.t_table.f_parent else row.t_table.f_parent.fl_full_name + " -> " + row.
t_table.f_name)     


I've found that virtual field in sqlhtml.py autocomplete widget are not 
working (web2py version 2.14.6-stable+timestamp.2016.05.10.00.21.47).

In particular the line
rows = Rows(self.db, records, table_rows.colnames, compact=table_rows.
compact) 
give an error *<type 'exceptions.NameError'> global name 'Rows' is not 
defined*
and count is limited to 10, regardless the limitby value.

I've managed to work with the following change:
    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)
                count = 0
                for row in table_rows:
                    if self.at_beginning:
                        if row[field.name].lower().startswith(self.request.
vars[self.keyword]):
                            count += 1
                            records.append(row)
                    else:
                        if self.request.vars[self.keyword] in row[field.name
].lower():
                            count += 1
                            records.append(row)
                    if count == self.limitby[1]: #<<<< ADDED LIMITBY 
                        break
                rows = (table_rows.__class__)(self.db, records, table_rows.
colnames, compact=table_rows.compact) # <<<<<< CHANGED ROWS CONSTRUCTOR


I'm using (table_rows.__class__) as a way to initialize the *Rows* class.
I don't know there is a better way.

Bye.


-- 
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