Call methods from a Model or from records¶
Unlike the Odoo API, there is a difference between class methods (e.g.: create, search, …) and instance methods that apply directly on existing records (write, read, …):
>>> User = odoo.env['res.users']
>>> User.write([6], {'name': "Dupont D."}) # Using the class method
True
>>> user = User.browse(6)
>>> user.write({'name': "Dupont D."}) # Using the instance method
>>> user.mapped('company_id.partner_id.child_ids.name') # Another use of instance method
['Chester Reed', 'Dwayne Newman']
When a method is called directly on records, their ids (here user.ids) is simply passed as the first parameter. This also means that you are not able to call class methods such as create or search from a set of records:
>>> User = odoo.env['res.users']
>>> User.create({...}) # Works
>>> user = User.browse(1)
>>> user.ids
[1]
>>> user.create({...}) # Error, `create()` does not accept `ids` in first parameter
>>> user.__class__.create({...}) # Works
This is a behaviour by design: OdooRPC has no way to make the difference between a class or an instance method through RPC, this is why it differs from the Odoo API.