← Back to team overview

openerp-community team mailing list archive

[Merge] lp:~thibaut-dirlik/openobject-server/fix-inherits-bug-303455 into lp:openobject-server

 

You have been requested to review the proposed merge of lp:~thibaut-dirlik/openobject-server/fix-inherits-bug-303455 into lp:openobject-server.

For more details, see:
https://code.launchpad.net/~thibaut-dirlik/openobject-server/fix-inherits-bug-303455/+merge/72914

The _inherits problem is complicated to solve with the current implementation. Because of the multiple-inheritance allowed by _inherits, parents can have fields with the same name that children.

When you create a new objects which uses _inherits, OpenERP will fill ONE of its parent field with the value specified in a field. For example,n if "active" = True, OpenERP will create the parent and set active to True for it. But if the object have a "active" field too, it won't be defined.

This small patch make OpenERP sets the value for the current object first, and, if the current object does not have a column, but the parent does, for its parent.

Their are implementation choices to do :

- What do to in case of multiple parents ? Currently, self._inherit_fields is a "mixin" and indeteminated because of the non-ordered state of the _inherits dict. So, the last read _inherits value is placed in the _inherit_fields attributen in the case multiple parent avec common fields.

- Unless this implementation change, it won't be possible to modify all the parent at once.

I wanted to set the value for all parents + the current object, but it's not possible unless we change the current _inherits implementation. So, I just did that.

-- 
https://code.launchpad.net/~thibaut-dirlik/openobject-server/fix-inherits-bug-303455/+merge/72914
Your team OpenERP Community is requested to review the proposed merge of lp:~thibaut-dirlik/openobject-server/fix-inherits-bug-303455 into lp:openobject-server.
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py	2011-08-11 18:12:17 +0000
+++ openerp/osv/orm.py	2011-08-25 15:17:17 +0000
@@ -4050,7 +4050,7 @@
         (upd0, upd1, upd2) = ('', '', [])
         upd_todo = []
         for v in vals.keys():
-            if v in self._inherit_fields:
+            if v in self._inherit_fields and v not in self._columns:
                 (table, col, col_detail) = self._inherit_fields[v]
                 tocreate[table][v] = vals[v]
                 del vals[v]