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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

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



  •             for orderline in purchase.order_line: <br />                self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} ) <br />这里是我的原来的语句! <br />转身 8:56:44<br />直接把所有的都写成了 approved <br />shelly→水 8:56:44<br />然后?  <br />转身 8:56:52<br />我想修改一下! <br />shelly→水 8:56:56<br />改成啥?  <br />转身 8:57:11<br />只把里面state 为 confirm 改成approved <br />转身 8:57:17<br />其他的不改 <br />shelly→水 8:57:24<br />那你要在前面查询.  shelly→水 8:58:52<br />你应该<br /><br />op_ids = self.pool.get('purchase.order.line').search(cr.uid[('state','=','confirm')]<br /><br />for op_id in op_ids:<br />  self.pool.get('purchase.order.line').write(cr, uid, op_id, {'state':'confirm'})  <br />shelly→水 8:59:08<br />先查询出ID. 然后遍历ID 使用write 方法  <br />shelly→水 8:59:13<br />应该也可以不用遍历.  <br />shelly→水 8:59:26<br />直接 <br />self.pool.get('purchase.order.line').write(cr, uid, op_ids, {'state':'confirm'})  <br />shelly→水 8:59:34<br />直接 操作 op_ids 就行了.  <br />转身 8:59:51<br />我试试看, <br />转身 9:02:48<br />老将出马,一个顶三! <br />转身 9:07:46<br />谢谢shelly [/sup] <br /><br />self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )。然后我又有另外一句也需要这么修改!<br />我按照shelly的方式 依葫芦画瓢,<br />op_ids=self.pool.get('stock.production.lot').search(cr,uid,[('state','=','cinfirmed)])<br /><br />self.pool.get('stock.production.lot').write(cr, uid, op_ids, {'state': 'approved'} ).<br />就不起作用!<br />我想这里主要的还是因为 [orderline.prodlot_id.id] <br />因为write的时候,[orderline.prodlot_id.id] ,是把orderline 里面prodlot_id 传输给'stock.production.lot',然后把这条记录的state给改写了!<br />但是在search 的时候,怎样才能把 orderline 里的 prodlot_id 传输给search呢?<br />写个SQL 语句,循环一下,还是 有直接的方法呢?<br />不知道哪位前辈指点一下?<br /><br />谢谢了先!



  •             for orderline in purchase.order_line: <br />                self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} ) <br />这里是我的原来的语句! <br />转身 8:56:44<br />直接把所有的都写成了 approved <br />shelly→水 8:56:44<br />然后?  <br />转身 8:56:52<br />我想修改一下! <br />shelly→水 8:56:56<br />改成啥?  <br />转身 8:57:11<br />只把里面state 为 confirm 改成approved <br />转身 8:57:17<br />其他的不改 <br />shelly→水 8:57:24<br />那你要在前面查询.  shelly→水 8:58:52<br />你应该<br /><br />op_ids = self.pool.get('purchase.order.line').search(cr.uid[('state','=','confirm')]<br /><br />for op_id in op_ids:<br />  self.pool.get('purchase.order.line').write(cr, uid, op_id, {'state':'confirm'})  <br />shelly→水 8:59:08<br />先查询出ID. 然后遍历ID 使用write 方法  <br />shelly→水 8:59:13<br />应该也可以不用遍历.  <br />shelly→水 8:59:26<br />直接 <br />self.pool.get('purchase.order.line').write(cr, uid, op_ids, {'state':'confirm'})  <br />shelly→水 8:59:34<br />直接 操作 op_ids 就行了.  <br />转身 8:59:51<br />我试试看, <br />转身 9:02:48<br />老将出马,一个顶三! <br />转身 9:07:46<br />谢谢shelly [/sup] <br /><br />self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )。然后我又有另外一句也需要这么修改!<br />我按照shelly的方式 依葫芦画瓢,<br />op_ids=self.pool.get('stock.production.lot').search(cr,uid,[('state','=','cinfirmed)])<br /><br />self.pool.get('stock.production.lot').write(cr, uid, op_ids, {'state': 'approved'} ).<br />就不起作用!<br />我想这里主要的还是因为 [orderline.prodlot_id.id] <br />因为write的时候,[orderline.prodlot_id.id] ,是把orderline 里面prodlot_id 传输给'stock.production.lot',然后把这条记录的state给改写了!<br />但是在search 的时候,怎样才能把 orderline 里的 prodlot_id 传输给search呢?<br />写个SQL 语句,循环一下,还是 有直接的方法呢?<br />不知道哪位前辈指点一下?<br /><br />谢谢了先!



  • 说明一下啊:这里是程序的主要代码!<br />被注释掉的两句是原来的!<br />剩下的都是后改的!<br />程序背景: 两个object: 'purchase.order.line'  字段state, prodlot_id<br />'stock.production.lot' 字段 state<br />为了实现的目的是:当approve PO的时候,把 'purchase.order.line'  里'state','=', 'complied' 改成 appvoed<br />同时 把 相应的 'stock.production.lot' 字段 state 也改成 appvoed<br />这里的对应关系是'purchase.order.line'  的 prodlot_id  = 'stock.production.lot'  的id<br /><br />[glow=red,2,300]但是下面的代码报错 list out of range[/glow]<br /><br /># 将 POline的状态写成 approve 测试没问题!<br />                pol_ids= self.pool.get('purchase.order.line').search(cr, uid,[( 'state','=', 'complied')] ) <br />                self.pool.get('purchase.order.line').write(cr, uid, pol_ids, {'state': 'approved'} )<br />  #将 stock_production_lot 的状态写成 approve,问题就在这里!  <br /><br />  #读取 prodlot_id 的值,并赋予 values,但是这里用了POL_IDS ,不知道是否可以这样用!                      <br />                values= self.pool.get('purchase.order.line').read(cr,uid,pol_ids,['prodlot_id']) [glow=red,2,300] 问题所在[/glow]<br />#查询  'stock.production.lot' id 等于 'prodlot_id'<br />                lot_id= self.pool.get('stock.production.lot').search(cr, uid,[( 'id','in', 'values')] ) [glow=red,2,300]问题所在[/glow]<br /># 写数据 。<br />                self.pool.get('stock.production.lot').write(cr, uid, lot_id, {'state': 'approved'} )  <br />            <br />                #self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} ) <br />                #self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )


  • 管理员

    从楼主上面贴出的代码来看,对一些基本概念还是有些混淆。<br /><br />我想问一一下,为什么要用for循环?purchase.order_line代表什么?如果已经获得了purchase.order_line对象了,为什么还要self.pool.get?



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



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


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待