[MERGE] osv: custom fields are no more _inherited.

lp bug: https://launchpad.net/bugs/766944 fixed

bzr revid: vmt@openerp.com-20110525150151-ksjmm5nc2foow3nx
This commit is contained in:
Vo Minh Thu 2011-05-25 17:01:51 +02:00
commit 8156aae67e
3 changed files with 19 additions and 1 deletions

View File

@ -63,7 +63,13 @@ class _column(object):
_symbol_set = (_symbol_c, _symbol_f)
_symbol_get = None
def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete="set null", translate=False, select=False, **args):
def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete="set null", translate=False, select=False, manual=False, **args):
"""
The 'manual' keyword argument specifies if the field is a custom one.
It corresponds to the 'state' column in ir_model_fields.
"""
if domain is None:
domain = []
if context is None:
@ -84,6 +90,7 @@ class _column(object):
self.read = False
self.view_load = 0
self.select = select
self.manual = manual
self.selectable = True
self.group_operator = args.get('group_operator', False)
for a in args:

View File

@ -2826,6 +2826,7 @@ class orm(orm_template):
'size': field['size'],
'ondelete': field['on_delete'],
'translate': (field['translate']),
'manual': True,
#'select': int(field['select_level'])
}

View File

@ -298,6 +298,11 @@ class osv_memory(osv_base, orm.orm_memory):
nattr = {}
for s in ('_columns', '_defaults'):
new = copy.copy(getattr(pool.get(parent_name), s))
if s == '_columns':
# Don't _inherit custom fields.
for c in new.keys():
if new[c].manual:
del new[c]
if hasattr(new, 'update'):
new.update(cls.__dict__.get(s, {}))
else:
@ -332,6 +337,11 @@ class osv(osv_base, orm.orm):
nattr = {}
for s in ('_columns', '_defaults', '_inherits', '_constraints', '_sql_constraints'):
new = copy.copy(getattr(pool.get(parent_name), s))
if s == '_columns':
# Don't _inherit custom fields.
for c in new.keys():
if new[c].manual:
del new[c]
if hasattr(new, 'update'):
new.update(cls.__dict__.get(s, {}))
else: