From 9a365e83e7c6b3be77607e5a8390d0d3dd46ae85 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 2 Apr 2015 15:48:38 +0200 Subject: [PATCH] [FIX] models: do not prefetch fields while the model schema is created The following case has shown the issue: extend the model `res.company` by adding at least two fields F and G, where F has a default value defined as: lambda self: self.env.user.company_id.name If the column F is created before G in the database, the existing records will be filled with the default value of F. When the default value is computed, the field `name` from a `res.company` is read, and other fields are prefetched, including G. This operation fails, because G does not exist in database yet! --- openerp/models.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openerp/models.py b/openerp/models.py index b536d19476a..2707cf6481d 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -2422,8 +2422,12 @@ class BaseModel(object): """ self._foreign_keys = set() raise_on_invalid_object_name(self._name) - if context is None: - context = {} + + # This prevents anything called by this method (in particular default + # values) from prefetching a field for which the corresponding column + # has not been added in database yet! + context = dict(context or {}, prefetch_fields=False) + store_compute = False stored_fields = [] # new-style stored fields with compute todo_end = []