[FIX] registry: Set the fields_by_model attribute in __init__(), use None to flag...
authorVo Minh Thu <vmt@openerp.com>
Fri, 14 Dec 2012 14:11:14 +0000 (15:11 +0100)
committerVo Minh Thu <vmt@openerp.com>
Fri, 14 Dec 2012 14:11:14 +0000 (15:11 +0100)
bzr revid: vmt@openerp.com-20121214141114-em9r66e3sfy21t2r

openerp/modules/loading.py
openerp/modules/registry.py
openerp/osv/orm.py

index b4ad08a..935ea8a 100644 (file)
@@ -149,7 +149,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
     # Query manual fields for all models at once and save them on the registry
     # so the initialization code for each model does not have to do it
     # one model at a time.
-    pool.fields_by_model = {'so_this_dict_is_not_empty': {}}
+    pool.fields_by_model = {}
     cr.execute('SELECT * FROM ir_model_fields WHERE state=%s', ('manual',))
     for field in cr.dictfetchall():
         pool.fields_by_model.setdefault(field['model'], []).append(field)
@@ -232,7 +232,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
 
     # The query won't be valid for models created later (i.e. custom model
     # created after the registry has been loaded), so empty its result.
-    pool.fields_by_model = {}
+    pool.fields_by_model = None
     
     cr.commit()
 
index d898cc7..afa8351 100644 (file)
@@ -50,6 +50,7 @@ class Registry(object):
         self._init = True
         self._init_parent = {}
         self._assertion_report = assertion_report.assertion_report()
+        self.fields_by_model = None
 
         # modules fully loaded (maintained during init phase by `loading` module)
         self._init_modules = set()
index 7d89139..69aee5a 100644 (file)
@@ -1020,7 +1020,7 @@ class BaseModel(object):
 
         # Check the query is already done for all modules of if we need to
         # do it ourselves.
-        if self.pool.fields_by_model:
+        if self.pool.fields_by_model is not None:
             manual_fields = self.pool.fields_by_model.get(self._name, [])
         else:
             cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))