Skip to Content
Menu
This question has been flagged
3 Replies
54134 Views

Hello,

    Seriously I can't find the decent point to say both are different to each other. and give me one example to which saturation to use @api.one and @api.multi ?

    One more thinks i would like to ask even if I define a method, that case which one is either @api.one or @api.multi preferable to specify above the method. thank you

Avatar
Discard
Best Answer

If I am not mistaking it is very easy and clear.
The @api.one is specific for one record and can not be used for multiple records. It automaticly loops on records of of a Recordset for you. 
@api.many is for multiple records, where you can loop through it etc. It will be the current Recordset without the itiration. So any looping would need to be programmed by yourself, for whatever you want

An example of @api.one:

@api.one def _compute_name(self):
      self.name = str(random.randint(1, 1e6))

An example of @api.multi:

@api.multi def subscribe(self):
     for session in self.session_ids:
         session.attendee_ids |= self.attendee_ids
     return {}

You can read more about the @api.one and @api.multi here: http://odoo-new-api-guide-line.readthedocs.org/en/latest/decorator.html

Avatar
Discard

You are spot on. api.multi is a single function call for multiple ids. Api.one means a function call for each id, which automatically iterates when multiple id's are sent.

Best Answer

it is very easy...


you our should never use api.one !

but always api.multi !

and if you want to work only with one record ... Use ensure_one() function ... with api.multi

Avatar
Discard