fix virtual fields with SQLFORM.grid fields=
Conflicts: gluon/sqlhtml.py
This commit is contained in:
+13
-8
@@ -1912,13 +1912,18 @@ 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
|
||||||
|
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]
|
columns = [f for f in fields if f.tablename in tablenames]
|
||||||
else:
|
else:
|
||||||
fields = []
|
fields = []
|
||||||
columns = []
|
columns = []
|
||||||
filter1 = lambda f:isinstance(f,Field)
|
virtual_columns = []
|
||||||
filter2 = lambda f:isinstance(f,Field) and f.readable
|
|
||||||
for table in tables:
|
for table in tables:
|
||||||
fields += filter(filter1, table)
|
fields += filter(filter1, table)
|
||||||
columns += filter(filter2, table)
|
columns += filter(filter2, table)
|
||||||
@@ -1926,8 +1931,10 @@ class SQLFORM(FORM):
|
|||||||
if not k.startswith('_'):
|
if not k.startswith('_'):
|
||||||
if isinstance(f,Field.Virtual) and f.readable:
|
if isinstance(f,Field.Virtual) and f.readable:
|
||||||
f.tablename = table._tablename
|
f.tablename = table._tablename
|
||||||
columns.append(f)
|
#show virtual fields after real fields so put at end of list
|
||||||
fields.append(f)
|
virtual_columns.append(f) #add to fields as well
|
||||||
|
fields = fields + virtual_columns
|
||||||
|
columns = columns + virtual_columns
|
||||||
|
|
||||||
if not field_id:
|
if not field_id:
|
||||||
if groupby is None:
|
if groupby is None:
|
||||||
@@ -2271,11 +2278,9 @@ class SQLFORM(FORM):
|
|||||||
limitby = (paginate*page,paginate*(page+1))
|
limitby = (paginate*page,paginate*(page+1))
|
||||||
else:
|
else:
|
||||||
limitby = None
|
limitby = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
table_fields = filter(
|
table_fields = [field for field in fields
|
||||||
lambda f: (f.tablename in tablenames) and \
|
if (field.tablename in tablenames and not(isinstance(field,Field.Virtual)))]
|
||||||
(not(isinstance(f,Field.Virtual))),fields)
|
|
||||||
if dbset._db._adapter.dbengine=='google:datastore':
|
if dbset._db._adapter.dbengine=='google:datastore':
|
||||||
rows = dbset.select(left=left,orderby=orderby,
|
rows = dbset.select(left=left,orderby=orderby,
|
||||||
groupby=groupby,limitby=limitby,
|
groupby=groupby,limitby=limitby,
|
||||||
|
|||||||
Reference in New Issue
Block a user