diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index 7084148885b..c0fd67ea56c 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -28,12 +28,16 @@ CREATE TABLE ir_model_fields ( model varchar NOT NULL, model_id integer references ir_model on delete cascade, name varchar NOT NULL, - relation varchar, - select_level varchar, - field_description varchar, - ttype varchar, state varchar default 'base', + field_description varchar, + help varchar, + ttype varchar, + relation varchar, relation_field varchar, + select_level varchar, + readonly boolean default False, + required boolean default False, + selectable boolean default False, translate boolean default False, serialization_field_id integer references ir_model_fields on delete cascade, primary key(id) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 85d247bc7b9..c3ba59f4f71 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -395,6 +395,7 @@ class ir_model_fields(osv.osv): # static table of properties model_props = [ # (our-name, fields.prop, set_fn) ('field_description', 'string', tools.ustr), + ('help', 'help', lambda s: s and tools.ustr(s) or None), ('required', 'required', bool), ('readonly', 'readonly', bool), ('domain', 'domain', eval), @@ -404,6 +405,9 @@ class ir_model_fields(osv.osv): ('select_level', 'index', lambda x: bool(int(x))), ('selection', 'selection', eval), ] + if context.get('lang') not in (None, 'en_US'): + # do not patch registry with translations of field string and help + model_props = model_props[2:] if vals and ids: checked_selection = False # need only check it once, so defer diff --git a/openerp/addons/base/ir/ir_model_view.xml b/openerp/addons/base/ir/ir_model_view.xml index 1b6c46083f4..a62b8518eda 100644 --- a/openerp/addons/base/ir/ir_model_view.xml +++ b/openerp/addons/base/ir/ir_model_view.xml @@ -53,10 +53,15 @@
- - - - + + + + + + + + + @@ -158,6 +163,7 @@ + diff --git a/openerp/models.py b/openerp/models.py index 54859c3adf4..a147615bc54 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -384,11 +384,11 @@ class BaseModel(object): 'ttype': f.type, 'relation': f.comodel_name or '', 'select_level': tools.ustr(int(f.index)), - 'readonly': (f.readonly and 1) or 0, - 'required': (f.required and 1) or 0, - 'selectable': (f.search or f.store and 1) or 0, - 'translate': (f.translate if hasattr(f,'translate') else False and 1) or 0, - 'relation_field': f.inverse_name if hasattr(f, 'inverse_name') else '', + 'readonly': bool(f.readonly), + 'required': bool(f.required), + 'selectable': bool(f.search or f.store), + 'translate': bool(getattr(f, 'translate', False)), + 'relation_field': getattr(f, 'inverse_name', ''), 'serialization_field_id': None, } if getattr(f, 'serialization_field', None): @@ -410,16 +410,11 @@ class BaseModel(object): cr.execute('select nextval(%s)', ('ir_model_fields_id_seq',)) id = cr.fetchone()[0] vals['id'] = id - cr.execute("""INSERT INTO ir_model_fields ( - id, model_id, model, name, field_description, ttype, - relation,state,select_level,relation_field, translate, serialization_field_id - ) VALUES ( - %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s - )""", ( - id, vals['model_id'], vals['model'], vals['name'], vals['field_description'], vals['ttype'], - vals['relation'], 'base', - vals['select_level'], vals['relation_field'], bool(vals['translate']), vals['serialization_field_id'] - )) + query = "INSERT INTO ir_model_fields (%s) VALUES (%s)" % ( + ",".join(vals), + ",".join("%%(%s)s" % name for name in vals), + ) + cr.execute(query, vals) if 'module' in context: name1 = 'field_' + self._table + '_' + k cr.execute("select name from ir_model_data where name=%s", (name1,)) @@ -431,16 +426,11 @@ class BaseModel(object): else: for key, val in vals.items(): if cols[k][key] != vals[key]: - cr.execute('update ir_model_fields set field_description=%s where model=%s and name=%s', (vals['field_description'], vals['model'], vals['name'])) - cr.execute("""UPDATE ir_model_fields SET - model_id=%s, field_description=%s, ttype=%s, relation=%s, - select_level=%s, readonly=%s ,required=%s, selectable=%s, relation_field=%s, translate=%s, serialization_field_id=%s - WHERE - model=%s AND name=%s""", ( - vals['model_id'], vals['field_description'], vals['ttype'], - vals['relation'], - vals['select_level'], bool(vals['readonly']), bool(vals['required']), bool(vals['selectable']), vals['relation_field'], bool(vals['translate']), vals['serialization_field_id'], vals['model'], vals['name'] - )) + names = set(vals) - set(['model', 'name']) + query = "UPDATE ir_model_fields SET %s WHERE model=%%(model)s and name=%%(name)s" % ( + ",".join("%s=%%(%s)s" % (name, name) for name in names), + ) + cr.execute(query, vals) break self.invalidate_cache(cr, SUPERUSER_ID)