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账号

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

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

    Odoo 新手求助
    2
    6
    4943
    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.
    • L
      lygping last edited by

                  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 Reply Last reply Reply Quote 0
      • L
        lygping last edited by

        说明一下啊:这里是程序的主要代码!
        被注释掉的两句是原来的!
        剩下的都是后改的!
        程序背景: 两个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 Reply Last reply Reply Quote 0
        • digitalsatori
          digitalsatori 管理员 last edited by

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

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

          1 Reply Last reply Reply Quote 0
          • L
            lygping last edited by

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

            1 Reply Last reply Reply Quote 0
            • L
              lygping last edited by

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

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