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,