Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

odoo 方法之间如何传递context



  • 如下代码,第一个方法中click_ready_button()获取了context的值,同时新增一个键到context,需要把context的值同步到调用的方法update_status()中。

    问题:
    第二个方法获取context,会发现第一个方法中update后的键没有,context的作用域也是方法内部吗?如果实现我说的传至,第二个方法增加个参数context=context吗?

    注:
    方法click_ready_button()的context值来源于视图,方法update_status()单独调用的话,context来源于视图,如果是被click_ready_button()方法调用的话,就需要用到被调用方法的context了。

    @api.multi
        def click_ready_button(self):
            context = dict(self._context or {})
            section = context.get('section', False)
    
            if section:
                if section == 'dfs':
                    self.update(state='progress')
                    self.with_context(context)
                    self.update_dfs_status()
    
     @api.one
        def update_status(self):
            context = dict(self._context or {})
            state = context.get('state', False)
          
            if state:
                self.dfs_status = state
    

  • 管理员

    如果是被click_ready_button()方法调用的话,就需要用到被调用方法的context了。

    通过with_context()可以修改context并往下传递。
    相关文档:https://www.odoo.com/documentation/10.0/reference/orm.html

    with_context([context][, **overrides]) → records
    

    这里描述是通过with_context()会返回一个添加了新contextrecordset,原来的recordset(你的self)是不会被修改的,你代码里面并没有取得新recordset并通过它调用其他方法,可以这样写:

    @api.multi
    def click_ready_button(self):
        ...
        self.with_context(key=value).update_status()
        ...
    


  • @joshua
    按你说的试了,可以传递context.

    还有个问题:这里描述是通过with_context()会返回一个添加了新context的recordset,这个所谓的新的不就是我的self吗?


  • 管理员

    @1234567

    这里说的是返回,不是修改原来的值,除非你这样写,你的self的context就会改变了:

    self = self.with_context(context)
    


  • @joshua
    我以为的是self就是这个函数中通用的,如果改变self中某一个属性,在哪里的self都会同步的.


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待