diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 44b73b08..60aec2ad 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1913,6 +1913,11 @@ class SQLFORM(FORM): tablenames += db._adapter.tables(join) tables = [db[tablename] for tablename in tablenames] if fields: + #add missing tablename to virtual fields + for table in tables: + for k,f in table.iteritems(): + if isinstance(f,Field.Virtual): + f.tablename = table._tablename columns = [f for f in fields if f.tablename in tablenames] else: fields = [] @@ -1926,9 +1931,8 @@ class SQLFORM(FORM): if not k.startswith('_'): if isinstance(f,Field.Virtual) and f.readable: f.tablename = table._tablename - columns.append(f) fields.append(f) - + columns.append(f) if not field_id: if groupby is None: field_id = tables[0]._id @@ -2271,11 +2275,9 @@ class SQLFORM(FORM): limitby = (paginate*page,paginate*(page+1)) else: limitby = None - try: - table_fields = filter( - lambda f: (f.tablename in tablenames) and \ - (not(isinstance(f,Field.Virtual))),fields) + table_fields = [field for field in fields + if (field.tablename in tablenames and not(isinstance(field,Field.Virtual)))] if dbset._db._adapter.dbengine=='google:datastore': rows = dbset.select(left=left,orderby=orderby, groupby=groupby,limitby=limitby,