[IMP] models: improve reflection of fields into ir.model.fields

* add missing columns in base.sql
* add missing fields 'help', 'readonly', 'required', 'selectable' in reflection
* add field 'help' in `ir.model.fields` views
* do not patch registry with translated field string and help upon `ir.model.fields` update
This commit is contained in:
Raphael Collet
2015-07-06 16:58:03 +02:00
parent 848c220180
commit d5a1d7b6ae
4 changed files with 37 additions and 33 deletions
+8 -4
View File
@@ -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)
+4
View File
@@ -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
+10 -4
View File
@@ -53,10 +53,15 @@
<field name="state"/>
</tree>
<form string="Fields Description">
<group col="4">
<field name="name"/>
<field name="state"/>
<field name="field_description"/>
<group>
<group>
<field name="name"/>
<field name="state"/>
</group>
<group>
<field name="field_description"/>
<field name="help"/>
</group>
</group>
<group string="Properties">
<group>
@@ -158,6 +163,7 @@
<group>
<field name="name" string="Field Name"/>
<field name="field_description"/>
<field name="help"/>
</group>
<group>
<field name="state"/>
+15 -25
View File
@@ -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)