openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #03895
[Merge] lp:~openerp-dev/openobject-server/6.0-bug-731487-xrg into lp:openobject-server/6.0
xrg has proposed merging lp:~openerp-dev/openobject-server/6.0-bug-731487-xrg into lp:openobject-server/6.0.
Requested reviews:
OpenERP Core Team (openerp)
Related bugs:
#731487 [6.0] SERVER : Can not add a osv.memory field from the Openerp interface
https://bugs.launchpad.net/bugs/731487
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-731487-xrg/+merge/52656
--
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-731487-xrg/+merge/52656
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/6.0-bug-731487-xrg.
=== modified file 'bin/addons/base/ir/ir_model.py'
--- bin/addons/base/ir/ir_model.py 2011-01-20 16:27:06 +0000
+++ bin/addons/base/ir/ir_model.py 2011-03-09 10:49:09 +0000
@@ -375,7 +375,13 @@
res = super(ir_model_fields,self).write(cr, user, ids, vals, context=context)
if column_rename:
- cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO "%s"' % column_rename[1])
+ if isinstance(column_rename[0], osv.orm.orm):
+ cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO "%s"' % column_rename[1])
+ elif isinstance(column_rename[0], osv.orm.orm_memory):
+ for id in column_rename[0].datas:
+ rec = column_rename[0].datas[id]
+ rec[column_rename[1][2]] = rec[column_rename[1][1]]
+ del rec[column_rename[1][1]]
# This is VERY risky, but let us have this feature:
# we want to change the key of column in obj._columns dict
col = column_rename[0]._columns.pop(column_rename[1][1]) # take object out, w/o copy
=== modified file 'bin/osv/orm.py'
--- bin/osv/orm.py 2011-03-03 14:24:25 +0000
+++ bin/osv/orm.py 2011-03-09 10:49:09 +0000
@@ -1902,6 +1902,39 @@
self.check_id = 0
cr.execute('delete from wkf_instance where res_type=%s', (self._name,))
+ # Load manual fields
+ if True:
+ cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
+ for field in cr.dictfetchall():
+ if field['name'] in self._columns:
+ continue
+ attrs = {
+ 'string': field['field_description'],
+ 'required': bool(field['required']),
+ 'readonly': bool(field['readonly']),
+ 'domain': field['domain'] or None,
+ 'size': field['size'],
+ 'ondelete': field['on_delete'],
+ 'translate': (field['translate']),
+ #'select': int(field['select_level'])
+ }
+
+ if field['ttype'] == 'selection':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(eval(field['selection']), **attrs)
+ elif field['ttype'] == 'reference':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(selection=eval(field['selection']), **attrs)
+ elif field['ttype'] == 'many2one':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], **attrs)
+ elif field['ttype'] == 'one2many':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], field['relation_field'], **attrs)
+ elif field['ttype'] == 'many2many':
+ _rel1 = field['relation'].replace('.', '_')
+ _rel2 = field['model'].replace('.', '_')
+ _rel_name = 'x_%s_%s_%s_rel' %(_rel1, _rel2, field['name'])
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], _rel_name, 'id1', 'id2', **attrs)
+ else:
+ self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
+
def _check_access(self, uid, object_id, mode):
if uid != 1 and self.datas[object_id]['internal.create_uid'] != uid:
raise except_orm(_('AccessError'), '%s access is only allowed on your own records for osv_memory objects except for the super-user' % mode.capitalize())
Follow ups