I had heard somewhere that one of the features planned for the orm in v8 was that you wouldn't need to pass cursor and user id with every call to a model's method, i.e:
self.pool.get('some.model').browse(cr, uid, id_list) # Old way
self.pool.get('some.model').browse(id_list) # New way.
Assuming that this is still going to be implemented (maybe it has been already?) I would like to make sure it works in all contexts. Specifically, I am making custom http-endpoints as part of a module. At least in the v7 way of doing things, I find models from request.registry instead of self.pool. If I call model methods in this way:
will it work?
I am currently developing on a pull from the master branch of Odoo from 2014-08-05, and calling browse() with just a list of id's throws a TypeError (expects at least 3 arguments). Can I expect the new way to work in future (or am I maybe doing it wrong)?
Yes, the traditional way has been modified in V8 with new api.
For instance, the statements::
model = self.pool.get(MODEL)
ids = model.search(cr, uid, DOMAIN, context=context)
for rec in model.browse(cr, uid, ids, context=context):
model.write(cr, uid, ids, VALUES, context=context)
may also be written as::
env = Env(cr, uid, context) # cr, uid, context wrapped in env
recs = env[MODEL] # retrieve an instance of MODEL
recs = recs.search(DOMAIN) # search returns a recordset
for rec in recs: # iterate over the records
recs.write(VALUES) # update all records in recs
Methods written in the "traditional" style are automatically decorated,
following some heuristics based on parameter names.
Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!
About This Community
|Asked: 8/8/14, 7:34 AM|
|Seen: 8209 times|
|Last updated: 3/16/15, 8:10 AM|