跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新手求助
  4. odoo 方法之间如何传递context

odoo 方法之间如何传递context

已定时 已固定 已锁定 已移动 Odoo 新手求助
5 帖子 2 发布者 3.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hui
    写于 最后由 编辑
    #1

    如下代码,第一个方法中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 条回复 最后回复
    0
    • JoshuaJ 离线
      JoshuaJ 离线
      Joshua 管理员
      写于 最后由 Joshua 编辑
      #2

      如果是被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()
          ...
      

      【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

      H 1 条回复 最后回复
      0
      • H 离线
        H 离线
        hui
        在 回复了 Joshua 最后由 编辑
        #3

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

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

        JoshuaJ 1 条回复 最后回复
        0
        • JoshuaJ 离线
          JoshuaJ 离线
          Joshua 管理员
          在 回复了 hui 最后由 编辑
          #4

          @1234567

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

          self = self.with_context(context)
          

          【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

          H 1 条回复 最后回复
          0
          • H 离线
            H 离线
            hui
            在 回复了 Joshua 最后由 编辑
            #5

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

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组