This fixes SQLFORM.grid virtualfields with fields=

This commit is contained in:
Tim Richardson
2013-10-12 23:25:59 +11:00
parent c526cedd41
commit cff267c9c6
+8 -13
View File
@@ -1912,9 +1912,8 @@ class SQLFORM(FORM):
for join in left: for join in left:
tablenames += db._adapter.tables(join) tablenames += db._adapter.tables(join)
tables = [db[tablename] for tablename in tablenames] tables = [db[tablename] for tablename in tablenames]
if fields: if fields:
#add missing tablename to virtual fields #add missing tablename to virtual fields
for table in tables: for table in tables:
for k,f in table.iteritems(): for k,f in table.iteritems():
if isinstance(f,Field.Virtual): if isinstance(f,Field.Virtual):
@@ -1923,21 +1922,17 @@ class SQLFORM(FORM):
else: else:
fields = [] fields = []
columns = [] columns = []
virtual_columns = [] filter1 = lambda f:isinstance(f,Field)
filter2 = lambda f:isinstance(f,Field) and f.readable
for table in tables: for table in tables:
fields += filter(filter1, table)
columns += filter(filter2, table)
for k,f in table.iteritems(): for k,f in table.iteritems():
if not k.startswith('_'): if not k.startswith('_'):
if isinstance(f,Field): if isinstance(f,Field.Virtual) and f.readable:
fields.append(f) #what gets selected
if f.readable:
columns.append(f) #what gets shown
elif isinstance(f,Field.Virtual) and f.readable:
f.tablename = table._tablename f.tablename = table._tablename
#show virtual fields after real fields so put at end of list fields.append(f)
virtual_columns.append(f) #add to fields as well columns.append(f)
fields = fields + virtual_columns
columns = columns + virtual_columns
if not field_id: if not field_id:
if groupby is None: if groupby is None:
field_id = tables[0]._id field_id = tables[0]._id