diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 34968a662fb..8591346471c 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -1067,6 +1067,8 @@ class function(_column): self._classic_write = True if type=='binary': self._symbol_get=lambda x:x and str(x) + else: + self._prefetch = True if type == 'float': self._symbol_c = float._symbol_c diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 870efd3dd8b..499a21f8555 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -385,11 +385,11 @@ class browse_record(object): # if the field is a classic one or a many2one, we'll fetch all classic and many2one fields if col._prefetch: # gen the list of "local" (ie not inherited) fields which are classic or many2one - fields_to_fetch = filter(lambda x: x[1]._classic_write, self._table._columns.items()) + fields_to_fetch = filter(lambda x: x[1]._classic_write and x[1]._prefetch, self._table._columns.items()) # gen the list of inherited fields inherits = map(lambda x: (x[0], x[1][2]), self._table._inherit_fields.items()) # complete the field list with the inherited fields which are classic or many2one - fields_to_fetch += filter(lambda x: x[1]._classic_write, inherits) + fields_to_fetch += filter(lambda x: x[1]._classic_write and x[1]._prefetch, inherits) # otherwise we fetch only that field else: fields_to_fetch = [(name, col)]