【问题标题】:How to populate a one2many field from another one2many field in python?如何从python中的另一个one2many字段填充one2many字段?
【发布时间】:2015-08-25 08:29:16
【问题描述】:

我有这种情况,我不知道该怎么办。情况是这样的:在类 sale_order 我有这个定义:

...
'sched_lines' : fields.one2many('schedule.schedule','Schedule'),
'factor_lines' : fields.one2many('sale.order.factor','Factor'),

所以,在 account_invoice 类中我也有这个定义:

...
'sched_lines' : fields.one2many('schedule.schedule','Schedule'),
'factor_lines' : fields.one2many('sale.order.factor','Factor'), 

回到类 sale_order 我重写了方法 ma​​nual_invoice

    for sale_order in self.browse(cr,uid,ids,context=context):
        _logger.info("\n\t\t\tFACTOR LINES IN SALE ORDER ... %s"%(str(sale_order.factor_lines)))
        _logger.info("\n\t\t\tHISTORY IN SALE ORDER ... %s"%(str(sale_order.sched_lines)))
        _logger.info("\n\t\t\tSALE ORDER ID ... %s\n\t\t\tIDS ... %s"%(str(sale_order.id),str(ids)))
        inv_id = self.pool.get('account.invoice').search(cr,uid,[('id','in',[new_inv_ids]),('origin','=',sale_order.name)])

        factor_list = self.pool.get('sale.order.factor').search(cr,uid,[('invoice_id','=',inv_id[0])])
        _logger.info("\n\t\t\tfactor_list...%s"%(str(factor_list)))
        factor_lines1 = [factors.id for factors in self.pool.get('sale.order.factor').browse(cr,uid,factor_list,context=context)]
        _logger.info("\n\t\t\tfactor_lines1...%s"%(str(factor_lines1)))

        # cr.execute('select id from sale_order_factor where invoice_id = %s', (tuple(inv_id)))
        #---------------- factor_lines1 = map(lambda x: x[0], cr.fetchall())
        # factor_lines1 = [(1,0,[factors.id for factors in sale_order.factor_lines])]
        #--- _logger.info("\n\t\t\tfactor_lines1...%s"%(str(factor_lines1)))

        self.pool.get('account.invoice').write(cr,uid,inv_id,{
                                                              'sched_ids': [(6,0,[sched.id for sched in sale_order.sched_lines])],
                                                              'factor_lines': [(6,0,[factor.id for factor in sale_order.factor_lines])],#factor_lines1
                                                              })

我无法理解的是,此语句 "[(6,0,[factor.id for factor in sale_order.factor_lines])]" 不起作用。当我查看发票时,它没有填充。它的来源,即 sale_order 中的 factor_lines,不为空。虽然此语句 "[(6,0,[sched.id for sched in sale_order.sched_lines])]" 工作正常。 sale_order sched_lines 中的内容很好。有谁可以指出我的代码中缺少什么(如果有的话)?我真的陷入了困境。

非常感谢任何帮助。

【问题讨论】:

    标签: python-2.7 one-to-many openerp-7


    【解决方案1】:

    好的,我明白了,代码没有问题。错误在于我的声明

    'factor_lines' : fields.one2many('sale.order.factor','Factor'), 
    

    而不是将其指向 sale_order_factor 类中的对应部分 (many2one)。它指向不同的类。顺便说一句,我忘记了我上面的声明没有正确设置,如这个问题的正文部分所示,可能是拼写错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多