跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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 depends 的触发

请问odoo depends 的触发

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

    问题是这样的 ,现有一张A表,B表和C表。B表和C表都有A表的id,B表和C表之间唯一的关联就是A_id。 我现在要对C表中的一些数据进行计算,并将之存储与B表中,通过A_id进行search。 请问现在depends该如何处理呢,怎样做到C表中用于计算的字段一旦发生变化,就会执行计算函数,并且更新到B表中。

    H 1 条回复 最后回复
    0
    • H 离线
      H 离线
      hui
      在 回复了 曹伯纯 最后由 hui 编辑
      #2

      @曹伯纯
      我这样想,你看可以不。
      1、比如模型C中需要计算的字段是c,依据变化的字段是c1,c2,这个按平常的@api.depends写就行。
      2、第一步以后字段c的值发生改变了,同时你要更新模型B的b字段的值,查询出符合你修改条件的B,然后调用B的write的方法。

      至于你说的通过A_id进行search,这个没懂,是这些变化的字段里面有跟A_id 相关的吗?没有这些计算,也可以通过A_id进行search的呀。

      1 条回复 最后回复
      0
      • 曹 离线
        曹 离线
        曹伯纯
        写于 最后由 曹伯纯 编辑
        #3

        @api.multi
        @api.depends('c1','c2')
        def _compute_qty(self):
        for rec in self:
        b = self.env['B'].search([('A_id','=',rec.A_id.id)])
        qty = rec.c1 + rec.c2
        b.b = qty

        compute = "_compute_qty" 应该放在哪里呢 @hui

        H 1 条回复 最后回复
        0
        • H 离线
          H 离线
          hui
          在 回复了 曹伯纯 最后由 hui 编辑
          #4

          @曹伯纯
          compute = "_compute_qty" 应该放在qty这个字段里面,例如:

          qty = fields.Char('Protection Type-Color',                                              compute='_compute_qty')
             
          

          再者b.b=qty这个有问题不?

          1 条回复 最后回复
          0
          • 曹 离线
            曹 离线
            曹伯纯
            写于 最后由 编辑
            #5

            这里要新建一个qty字段用来存储计算后的字段吗,那B表中write方法还是要等B表操作才会更新计算值啊@hui

            H 1 条回复 最后回复
            0
            • 曹 离线
              曹 离线
              曹伯纯
              写于 最后由 曹伯纯 编辑
              #6

              这里是不是应该调用C中的write方法 @hui

              H 1 条回复 最后回复
              0
              • H 离线
                H 离线
                hui
                在 回复了 曹伯纯 最后由 hui 编辑
                #7

                @曹伯纯
                1、你不是要计算一些数据,不是根据已有的字段c1,c2计算出字段c吗,你看你具体的要求,需不需要再重写一个字段?
                2、要write的话,就是

                @api.multi
                @api.depends('c1','c2')
                def _compute_qty(self):
                    for rec in self:
                        b = self.env['B'].search([('A_id','=',rec.A_id.id)])
                        qty = rec.c1 + rec.c2
                        b.write({'b': qty})
                
                1 条回复 最后回复
                0
                • 曹 离线
                  曹 离线
                  曹伯纯
                  写于 最后由 编辑
                  #8

                  有点明白了 还是代码直观 我去试试看 @hui 谢谢

                  1 条回复 最后回复
                  0
                  • H 离线
                    H 离线
                    hui
                    在 回复了 曹伯纯 最后由 编辑
                    #9

                    @曹伯纯
                    是更新哪个表,就是哪个表write啊,你不是要更新b表的数据吗?所以要b write

                    1 条回复 最后回复
                    0

                    • 登录

                    • 没有帐号? 注册

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