Odoo Help


Why pool.get(model) is used to get a model instance instead of pool[model]?

Mohammad Alhashash
on 8/18/13, 6:02 AM 4,362 views

In almost all uses of self.pool.get(model) the Nonereturn value (missing model) is not handled. This usually leads to a very confusing exception later in other place in the form AttributeError: 'NoneType' object has no attribute 'xxxxx'.

Sometimes, finding the error cause is not straightforward as the exception does not show the offending model name which may be from XML data or has been dynamically manipulated like in menu actions or just a missing dependency.

To find the problem, I have to set a conditional breakpoint for the None value at the exception line and look up in the stack for the model name.

Since the Registry class has __getitem__() method, I started to use self.pool[model] in my code to get an exception that shows the model name immediately in the form KeyError: 'model.name' instead of a confusing error later.

My question is, why OpenERP server and core modules use the pool.get() method if the None value is not handled anyway?

I have become used to having to do this - if self.pool.get(model): m = self.pool.get(model). Good to know its possible to just index self.pool.

on 8/20/13, 9:31 AM

That is quite a remarkable question.

René Schuster
on 11/28/13, 11:39 AM
On 11/29/13, 3:39 AM

OpenERP Since a begins uses self.pool.get(model).

First thing is to understand this ERP architecture,

here modular approach and dependencies are well maintained.

So when you try to use any dependent module you must have add in depends at __openerp__.py file. It mean depending module always be their no need to worry about ‘None’ .

Whenever you try self.pool.get(model), it mean as logically you try to use existing module’s model or dependent model. Here no need to worry about it return None.

Source : http://goo.gl/qdAPD4 
Torsten Francke
On 11/29/13, 9:13 AM

I think since __getitem__() is added the core modules was not refactored.

Maybe, but even in new modules, pool is always accessed using the get() method.

Mohammad Alhashash
on 12/14/13, 12:38 PM

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

0 follower(s)


Asked: 8/18/13, 6:02 AM
Seen: 4362 times
Last updated: 2/5/17, 9:22 AM