possibly fixed a problem with virtualfields in fields option of SQLFORM.grid, thanks peckto
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.6.0-development+timestamp.2013.07.17.17.18.40
|
Version 2.6.0-development+timestamp.2013.07.19.03.27.22
|
||||||
|
|||||||
+10
-11
@@ -1538,6 +1538,7 @@ class BaseAdapter(ConnectionPool):
|
|||||||
args_get = attributes.get
|
args_get = attributes.get
|
||||||
tablenames = tables(query)
|
tablenames = tables(query)
|
||||||
tablenames_for_common_filters = tablenames
|
tablenames_for_common_filters = tablenames
|
||||||
|
fields = [f for f in fields if not isinstance(f,Field.Virtual)] # skip virtual fields
|
||||||
for field in fields:
|
for field in fields:
|
||||||
if isinstance(field, basestring) \
|
if isinstance(field, basestring) \
|
||||||
and REGEX_TABLE_DOT_FIELD.match(field):
|
and REGEX_TABLE_DOT_FIELD.match(field):
|
||||||
@@ -2109,19 +2110,17 @@ class BaseAdapter(ConnectionPool):
|
|||||||
rowsobj = Rows(db, new_rows, colnames, rawrows=rows)
|
rowsobj = Rows(db, new_rows, colnames, rawrows=rows)
|
||||||
|
|
||||||
for tablename in virtualtables:
|
for tablename in virtualtables:
|
||||||
### new style virtual fields
|
|
||||||
table = db[tablename]
|
table = db[tablename]
|
||||||
fields_virtual = [(f,v) for (f,v) in table.iteritems()
|
all_fields = filter(lambda nv: nv[1] in fields and
|
||||||
if isinstance(v,FieldVirtual)]
|
isinstance(nv[1],(FieldVirtual,FieldMethod)),
|
||||||
fields_lazy = [(f,v) for (f,v) in table.iteritems()
|
table.iteritems())
|
||||||
if isinstance(v,FieldMethod)]
|
if all_fields:
|
||||||
if fields_virtual or fields_lazy:
|
|
||||||
for row in rowsobj.records:
|
for row in rowsobj.records:
|
||||||
box = row[tablename]
|
box = row[tablename] # CHECK THIS
|
||||||
for f,v in fields_virtual:
|
for fieldname,field in all_fields:
|
||||||
box[f] = v.f(row)
|
box[fieldname] = field.f(row) \
|
||||||
for f,v in fields_lazy:
|
if isinstance(field,FieldVirtual) else \
|
||||||
box[f] = (v.handler or VirtualCommand)(v.f,row)
|
(field.handler or VirtualCommand)(field.f,row)
|
||||||
|
|
||||||
### old style virtual fields
|
### old style virtual fields
|
||||||
for item in table.virtualfields:
|
for item in table.virtualfields:
|
||||||
|
|||||||
+3
-1
@@ -1928,6 +1928,7 @@ class SQLFORM(FORM):
|
|||||||
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)
|
columns.append(f)
|
||||||
|
fields.append(f)
|
||||||
if not field_id:
|
if not field_id:
|
||||||
field_id = tables[0]._id
|
field_id = tables[0]._id
|
||||||
if not any(str(f)==str(field_id) for f in fields):
|
if not any(str(f)==str(field_id) for f in fields):
|
||||||
@@ -2239,7 +2240,7 @@ class SQLFORM(FORM):
|
|||||||
limitby = None
|
limitby = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
table_fields = [f for f in fields if f.tablename in tablenames]
|
table_fields = filter(lambda f: f.tablename in tablenames, 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,
|
||||||
@@ -2247,6 +2248,7 @@ class SQLFORM(FORM):
|
|||||||
cacheable=True,*table_fields)
|
cacheable=True,*table_fields)
|
||||||
next_cursor = dbset._db.get('_lastcursor', None)
|
next_cursor = dbset._db.get('_lastcursor', None)
|
||||||
else:
|
else:
|
||||||
|
# print('table_fields: %s' %([f_.name for f_ in table_fields],))
|
||||||
rows = dbset.select(left=left,orderby=orderby,
|
rows = dbset.select(left=left,orderby=orderby,
|
||||||
groupby=groupby,limitby=limitby,
|
groupby=groupby,limitby=limitby,
|
||||||
cacheable=True,*table_fields)
|
cacheable=True,*table_fields)
|
||||||
|
|||||||
Reference in New Issue
Block a user