跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. 【请教语法】关于write search 和get

【请教语法】关于write search 和get

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

                for orderline in purchase.order_line:
                    self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} )
    这里是我的原来的语句!
    转身 8:56:44
    直接把所有的都写成了 approved
    shelly→水 8:56:44
    然后? 
    转身 8:56:52
    我想修改一下!
    shelly→水 8:56:56
    改成啥? 
    转身 8:57:11
    只把里面state 为 confirm 改成approved
    转身 8:57:17
    其他的不改
    shelly→水 8:57:24
    那你要在前面查询.  shelly→水 8:58:52
    你应该

    op_ids = self.pool.get('purchase.order.line').search(cr.uid[('state','=','confirm')]

    for op_id in op_ids:
      self.pool.get('purchase.order.line').write(cr, uid, op_id, {'state':'confirm'}) 
    shelly→水 8:59:08
    先查询出ID. 然后遍历ID 使用write 方法 
    shelly→水 8:59:13
    应该也可以不用遍历. 
    shelly→水 8:59:26
    直接
    self.pool.get('purchase.order.line').write(cr, uid, op_ids, {'state':'confirm'}) 
    shelly→水 8:59:34
    直接 操作 op_ids 就行了. 
    转身 8:59:51
    我试试看,
    转身 9:02:48
    老将出马,一个顶三!
    转身 9:07:46
    谢谢shelly [/sup]

    self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )。然后我又有另外一句也需要这么修改!
    我按照shelly的方式 依葫芦画瓢,
    op_ids=self.pool.get('stock.production.lot').search(cr,uid,[('state','=','cinfirmed)])

    self.pool.get('stock.production.lot').write(cr, uid, op_ids, {'state': 'approved'} ).
    就不起作用!
    我想这里主要的还是因为 [orderline.prodlot_id.id]
    因为write的时候,[orderline.prodlot_id.id] ,是把orderline 里面prodlot_id 传输给'stock.production.lot',然后把这条记录的state给改写了!
    但是在search 的时候,怎样才能把 orderline 里的 prodlot_id 传输给search呢?
    写个SQL 语句,循环一下,还是 有直接的方法呢?
    不知道哪位前辈指点一下?

    谢谢了先!

    1 条回复 最后回复
    0
    • L 离线
      L 离线
      lygping
      写于 最后由 编辑
      #2

      说明一下啊:这里是程序的主要代码!
      被注释掉的两句是原来的!
      剩下的都是后改的!
      程序背景: 两个object: 'purchase.order.line'  字段state, prodlot_id
      'stock.production.lot' 字段 state
      为了实现的目的是:当approve PO的时候,把 'purchase.order.line'  里'state','=', 'complied' 改成 appvoed
      同时 把 相应的 'stock.production.lot' 字段 state 也改成 appvoed
      这里的对应关系是'purchase.order.line'  的 prodlot_id  = 'stock.production.lot'  的id

      [glow=red,2,300]但是下面的代码报错 list out of range[/glow]

      # 将 POline的状态写成 approve 测试没问题!
                      pol_ids= self.pool.get('purchase.order.line').search(cr, uid,[( 'state','=', 'complied')] )
                      self.pool.get('purchase.order.line').write(cr, uid, pol_ids, {'state': 'approved'} )
        #将 stock_production_lot 的状态写成 approve,问题就在这里! 

        #读取 prodlot_id 的值,并赋予 values,但是这里用了POL_IDS ,不知道是否可以这样用!                     
                      values= self.pool.get('purchase.order.line').read(cr,uid,pol_ids,['prodlot_id']) [glow=red,2,300] 问题所在[/glow]
      #查询  'stock.production.lot' id 等于 'prodlot_id'
                      lot_id= self.pool.get('stock.production.lot').search(cr, uid,[( 'id','in', 'values')] ) [glow=red,2,300]问题所在[/glow]
      # 写数据 。
                      self.pool.get('stock.production.lot').write(cr, uid, lot_id, {'state': 'approved'} ) 
                 
                      #self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} )
                      #self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )

      1 条回复 最后回复
      0
      • digitalsatoriD 离线
        digitalsatoriD 离线
        digitalsatori 管理员
        写于 最后由 编辑
        #3

        从楼主上面贴出的代码来看,对一些基本概念还是有些混淆。

        我想问一一下,为什么要用for循环?purchase.order_line代表什么?如果已经获得了purchase.order_line对象了,为什么还要self.pool.get?

        【上海先安科技】(tony AT openerp.cn)

        1 条回复 最后回复
        0
        • L 离线
          L 离线
          lygping
          写于 最后由 编辑
          #4

          for 循环是个错误,已经去掉!
          关系说明也补充在里面!谢谢楼上啊!

          1 条回复 最后回复
          0
          • L 离线
            L 离线
            lygping
            写于 最后由 编辑
            #5

            谢谢楼上的,
            后来我直接在语句里插入一个 if 判断语句,也可以实现功能。

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

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