Technical mailing list archives

Re: @api.depends cannot be set for tracking other module fields?

Maxim Litnitskiy
- 09/12/2014 05:21:36
Thank You Atchuthan!
In old api we could  decouple objects and still have dependency on field changes, right?
In new api we have to define many2one fields to every object we want to track, right? 

7 GMT+04:00 Atchuthan T U <>:
Hi Maxim,

A brief description of how depends works is provided in the file of Version 8

def depends(*args):
    """ Return a decorator that specifies the field dependencies of a "compute"
        method (for new-style function fields). Each argument must be a string
        that consists in a dot-separated sequence of field names::

            pname = fields.Char(compute='_compute_pname')

            @api.depends('', 'partner_id.is_company')
            def _compute_pname(self):
                if self.partner_id.is_company:
                    self.pname = ( or "").upper()
                    self.pname =

        One may also pass a single function as argument. In that case, the
        dependencies are given by calling the function with the field's model.
    if args and callable(args[0]):
        args = args[0]
    return lambda method: decorate(method, '_depends', args)

So, First we need to create a many2one field that links to this object 'astpbx.exten' named 'extension_id'

@depends('extension_id.exten_type', 'extension_id.peer_jd', 'extension_id.pattern', 'extension_id.custom_dialplan','','user_id.exten')
def _get_name(self, record):


On Sat, Sep 6, 2014 at 3:24 PM, Maxim Litnitskiy <> wrote:
Hi dear developers!
I have a question regarding new api.
Seems we lost a good piese of functionality with new @api.depends.
Here is the example

Old api:

    _columns = {
        'name': fields.function(_get_name, method=True, type='char', string='Name', store={
            'astpbx.exten': (
                lambda self, cr, uid, ids, c={}: ids,
                ['exten_type', 'peer_id', 'pattern', 'custom_dialplan'],
                'res.partner': (_get_partner_user_exten, ['name'], 1),
                'res.users': (_get_user_exten, ['exten'], 1),

I redefine column 'name' when partner name is changed and also when my model's fields are changed.

Now how can I move that code to new api?
@api.depends('exten_type', 'peer_id', 'pattern', 'custom_dialplan')
def _do_name(self):
    # code here

How can I specify other models??
@api.depends('exten_type', 'peer_id', 'pattern', 'custom_dialplan')
@api.depends('') ???
def _do_name(self):
    # code here


Post to:

Post to: