Navigation

    Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

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

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

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

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

    odoo 方法之间如何传递context

    Odoo 新手求助
    2
    5
    2945
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hui last edited by

      如下代码,第一个方法中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
      
      1 Reply Last reply Reply Quote 0
      • Joshua
        Joshua 管理员 last edited by Joshua

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

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

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

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

        @api.multi
        def click_ready_button(self):
            ...
            self.with_context(key=value).update_status()
            ...
        
        H 1 Reply Last reply Reply Quote 0
        • H
          hui @Joshua last edited by

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

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

          Joshua 1 Reply Last reply Reply Quote 0
          • Joshua
            Joshua 管理员 @hui last edited by

            @1234567

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

            self = self.with_context(context)
            
            H 1 Reply Last reply Reply Quote 0
            • H
              hui @Joshua last edited by

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

              1 Reply Last reply Reply Quote 0
              • First post
                Last post