better support of virtual fields in grid by accessing new sqlrows.colnames_fields, thanks Paolo
This commit is contained in:
+1
-1
Submodule gluon/packages/dal updated: 43686a98bb...5bacaf785a
+17
-16
@@ -2450,11 +2450,6 @@ class SQLFORM(FORM):
|
|||||||
tablenames = merge_tablemaps(tablenames, db._adapter.tables(join))
|
tablenames = merge_tablemaps(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 iteritems(table):
|
|
||||||
if isinstance(f, Field.Virtual):
|
|
||||||
f.tablename = table._tablename
|
|
||||||
columns = [f for f in fields if f.tablename in tablenames and f.listable]
|
columns = [f for f in fields if f.tablename in tablenames and f.listable]
|
||||||
else:
|
else:
|
||||||
fields = []
|
fields = []
|
||||||
@@ -2684,13 +2679,13 @@ class SQLFORM(FORM):
|
|||||||
dbset = dbset(SQLFORM.build_query(
|
dbset = dbset(SQLFORM.build_query(
|
||||||
sfields, keywords))
|
sfields, keywords))
|
||||||
rows = dbset.select(left=left, orderby=orderby,
|
rows = dbset.select(left=left, orderby=orderby,
|
||||||
cacheable=True, *expcolumns)
|
cacheable=True, *selectable_columns)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
response.flash = T('Internal Error')
|
response.flash = T('Internal Error')
|
||||||
rows = []
|
rows = []
|
||||||
else:
|
else:
|
||||||
rows = dbset.select(left=left, orderby=orderby,
|
rows = dbset.select(left=left, orderby=orderby,
|
||||||
cacheable=True, *expcolumns)
|
cacheable=True, *selectable_columns)
|
||||||
|
|
||||||
value = exportManager[export_type]
|
value = exportManager[export_type]
|
||||||
clazz = value[0] if hasattr(value, '__getitem__') else value
|
clazz = value[0] if hasattr(value, '__getitem__') else value
|
||||||
@@ -3425,16 +3420,22 @@ class SQLTABLE(TABLE):
|
|||||||
(components, row) = (self.components, [])
|
(components, row) = (self.components, [])
|
||||||
if not sqlrows:
|
if not sqlrows:
|
||||||
return
|
return
|
||||||
REGEX_TABLE_DOT_FIELD = sqlrows.db._adapter.REGEX_TABLE_DOT_FIELD
|
fieldlist = sqlrows.colnames_fields
|
||||||
fieldmap = dict(list(zip(sqlrows.colnames, sqlrows.fields)))
|
fieldmap = dict(zip(sqlrows.colnames, fieldlist))
|
||||||
tablemap = dict(((f.tablename, f.table) if isinstance(f, Field) else (f._table._tablename, f._table) for f in fieldmap.values()))
|
if columns:
|
||||||
for table in tablemap.values():
|
tablenames = []
|
||||||
pref = table._tablename + '.'
|
for colname, field in fieldmap.iteritems():
|
||||||
fieldmap.update(((pref+f.name, f) for f in table._virtual_fields))
|
if isinstance(field, (Field, Field.Virtual)):
|
||||||
fieldmap.update(((pref+f.name, f) for f in table._virtual_methods))
|
tablenames.append(field.tablename)
|
||||||
field_types = (Field, Field.Virtual, Field.Method)
|
elif isinstance(field, Expression):
|
||||||
if not columns:
|
tablenames.append(field._table._tablename)
|
||||||
|
for tablename in set(tablenames):
|
||||||
|
table = sqlrows.db[tablename]
|
||||||
|
fieldmap.update((("%s.%s" % (tablename, f.name), f) for f in table._virtual_fields + table._virtual_methods))
|
||||||
|
else:
|
||||||
columns = list(sqlrows.colnames)
|
columns = list(sqlrows.colnames)
|
||||||
|
field_types = (Field, Field.Virtual, Field.Method)
|
||||||
|
|
||||||
header_func = {
|
header_func = {
|
||||||
'fieldname:capitalize': lambda f: f.name.replace('_', ' ').title(),
|
'fieldname:capitalize': lambda f: f.name.replace('_', ' ').title(),
|
||||||
'labels': lambda f: f.label
|
'labels': lambda f: f.label
|
||||||
|
|||||||
Reference in New Issue
Block a user