diff --git a/modules/plugin_dbui/cfgsvc.py b/modules/plugin_dbui/cfgsvc.py index abe227206507a6ce03e12b14da8875c3db58e217..b7b3c358417dad360a80c6cccae712a3625c93ae 100644 --- a/modules/plugin_dbui/cfgsvc.py +++ b/modules/plugin_dbui/cfgsvc.py @@ -345,34 +345,52 @@ class CfgSvc(object): return di - def _get_json_store(self, table): + def _get_json_store(self, tablename): """ Generate configuration object for JSON stores required by the gridPanel widget. """ - di = {"table": table, - "idProperty": encode_field(table,'id'), + di = {"table": tablename, + "idProperty": encode_field(tablename,'id'), "dbFields": [], "fields": []} - for field in self._db[table].fields: - if field in di["dbFields"]: + for fieldname in self._db[tablename].fields: + + if fieldname in di["dbFields"]: raise Exception, FIELD_IN_DBFIELD - di["dbFields"].append([table, field]) - di["fields"].append(encode_field(table, field)) + # encode field name and default value are in the store + field = self._db[tablename][fieldname] + field_cfg = {'name': encode_field(tablename, fieldname)} + if field.default: + field_cfg['defaultValue'] = str(field.default) + + di["dbFields"].append([tablename, fieldname]) + di["fields"].append(field_cfg) - if self._is_foreign_field(table, field): + if self._is_foreign_field(tablename, fieldname): + if "where" not in di: di["where"] = [] - k_table, k_field, k_key = self._get_foreign_data(table, field) + k_tablename, k_fieldname, k_key = self._get_foreign_data(tablename, fieldname) - if k_field in di["dbFields"]: + if k_fieldname in di["dbFields"]: raise Exception, FIELD_IN_DBFIELD - di["dbFields"].append([k_table, k_field]) - di["fields"].append(encode_field(k_table, k_field)) - di["where"].append("[%s.%s] == [%s.%s]" % (table, field, k_table, k_key)) + # encode field name and default value are in the store + k_field = self._db[k_tablename][k_fieldname] + k_field_cfg = {'name': encode_field(k_tablename, k_fieldname)} + + # retrieve the default value for the foreign key + if field.default: + row = self._db(self._db[k_tablename].id == field.default).select().first() + if row: + k_field_cfg['defaultValue'] = row[k_fieldname] + + di["dbFields"].append([k_tablename, k_fieldname]) + di["fields"].append(k_field_cfg) + di["where"].append("[%s.%s] == [%s.%s]" % (tablename, fieldname, k_tablename, k_key)) return di