[FIX] registry: Set the fields_by_model attribute in __init__(), use None to flag non-existing fields-per-model cache.

bzr revid: vmt@openerp.com-20121214141114-em9r66e3sfy21t2r
This commit is contained in:
Vo Minh Thu 2012-12-14 15:11:14 +01:00
parent 3667e3c619
commit 08a082f63f
3 changed files with 4 additions and 3 deletions

View 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()

View 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()

View 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'))