diff --git a/bin/osv/fields.py b/bin/osv/fields.py index 72df0e925ad..7cac40f2ec8 100644 --- a/bin/osv/fields.py +++ b/bin/osv/fields.py @@ -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' kayword argument specify if the field is a custom one. It + correspond 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: diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 91574e7fa6a..337125df29f 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -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']) } diff --git a/bin/osv/osv.py b/bin/osv/osv.py index 138e8c8daab..0d8cad9e4e5 100644 --- a/bin/osv/osv.py +++ b/bin/osv/osv.py @@ -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: