[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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user